Line: 1 to 1 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<-- Ready to Review --> Logic in AMPL | |||||||||||||
Changed: | |||||||||||||
< < | |||||||||||||
> > | |||||||||||||
Relational OperatorsRelational operators are used to compare two expressions. They are most commonly used in constraints, but not exclusively. The relational operators are:
| |||||||||||||
Changed: | |||||||||||||
< < |
| ||||||||||||
> > |
| ||||||||||||
Return to top | |||||||||||||
Line: 31 to 29 | |||||||||||||
Logical operators are used to combine logical expressions. They are most commonly used in conditional statements, conditional structures and conditional loops. The logical operators are not , and and or . They are used as shown in the table below:
| |||||||||||||
Changed: | |||||||||||||
< < |
| ||||||||||||
> > |
| ||||||||||||
Return to top
Logical Expressions | |||||||||||||
Changed: | |||||||||||||
< < | Logical expressions are expressions that will evaluate to either true or false. Logical expressions are
usually defined in terms of the relational operators:
Lower[r] <= sum {i in INGREDIENTS} Contributes[r, i] * Amount[i] sum {s in SURFBOARDS} Recipe[m, s] * Production[s] <= Supply[m]; | ||||||||||||
> > | Logical expressions are expressions that will evaluate to either true or false. Logical expressions are usually defined in terms of the relational operators:
Lower[r] <= sum {i in INGREDIENTS} Contributes[r, i] * Amount[i] sum {s in SURFBOARDS} Recipe[m, s] * Production[s] <= Supply[m]; | ||||||||||||
However, there are some special logical expressions in AMPL for use with sets: | |||||||||||||
Changed: | |||||||||||||
< < |
| ||||||||||||
> > |
| ||||||||||||
Logical expressions can be built up from other logical expressions, binary parameters and logical operators. | |||||||||||||
Line: 64 to 57 | |||||||||||||
Conditional ExpressionsA conditional expression is very much like theIF function in Microsoft Excel: | |||||||||||||
Changed: | |||||||||||||
< < | param ifvalue := if <some logical expression> then <a value> [else <another value>]; | ||||||||||||
> > | param ifvalue := if | ||||||||||||
Changed: | |||||||||||||
< < | If the logical expression is true then ifvalue will be set to <a value> , otherwise it is set to 0 (by default) or, if the else part of the expression is present, <another value> . Note that if the else keyword is present, then no ; needs to be included after <a value> . | ||||||||||||
> > | If the logical expression is true then ifvalue will be set to , otherwise it is set to 0 (by default) or, if the else part of the expression is present, else keyword is present, then no ; needs to be included after . | ||||||||||||
Return to top
Conditional StructuresA conditional structure is the same as the classical if_-_then_-_else statement in programming languages like MATLAB, Fortran, Visual Basic and C++: | |||||||||||||
Changed: | |||||||||||||
< < | if <logical expression> then <a statement>; [else <another statement>;]Note here that even if the else keyword is present you need to end <a statement> with ; . If you want to include more than one statement within the conditional structures you can use { and } to enclose your statements:
if <logical expression> then { <some statements> } [else { <some other statements> }] | ||||||||||||
> > | ifNote here that even if the else keyword is present you need to end with ; . If you want to include more than one statement within the conditional structures you can use { and } to enclose your statements:
if | ||||||||||||
Return to top
Binary ParametersIn AMPL we can create binary parameters by using thebinary keyword in the parameter declaration: | |||||||||||||
Changed: | |||||||||||||
< < | param stillSearching binary; | ||||||||||||
> > | param stillSearching binary; | ||||||||||||
Binary parameters are used in a similar way to boolean variables (in Matlab, C, etc) and logical variables (Fortran). If a binary parameter has the value 0 this is equivalent to false, and 1 is equivalent to true. Binary parameters can be used with conditional expressions to hold a true/false result from a logical expression: | |||||||||||||
Changed: | |||||||||||||
< < | param isGreater binary; let isGreater := if 4 > 5 then 1 else 0; # isGreater = 0 (false) let isGreater := if 6 > 5 then 1; # else 0 is the default, isGreater = 1 (true)so the syntax is let <binary parameter> := if <expression> then 1; | ||||||||||||
> > | param isGreater binary; let isGreater := if 4 > 5 then 1 else 0; # isGreater = 0 (false) let isGreater := if 6 > 5 then 1; # else 0 is the default, isGreater = 1 (true)so the syntax is let | ||||||||||||
You can also set binary parameters within conditional structures | |||||||||||||
Changed: | |||||||||||||
< < | binary <binary parameter>; if <expression> then let <binary parameter> := 1; else let <binary parameter> := 0; | ||||||||||||
> > | binary | ||||||||||||
Binary parameters may be used in logical expressions or as the condition in a conditional statement or conditional structure. They are very useful for building complex conditional statements or structures: | |||||||||||||
Changed: | |||||||||||||
< < | Some example from depth first searching or column generationComing soon! and controlling conditional loops: Some example from depth first searching or column generationComing soon! | ||||||||||||
> > | Some example from depth first searching or column generationComing soon! and controlling conditional loops: Some example from depth first searching or column generationComing soon! | ||||||||||||
Return to top |