Logic in AMPL
- Relational Operators
- Logical Operators
- Logical Expressions
- Conditional Expressions
- Conditional Structures
- Binary Parameters
Relational Operators
Relational operators are used to compare two expressions. They are most commonly used in
constraints, but not exclusively. The relational operators are:
Expression |
Meaning |
< |
Less than |
<= |
Less than or equal to |
> |
Greater than |
>= |
Greater than or equal to |
== |
Equal to |
<> |
Not equal to |
Return to top
Logical Operators
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:
Expression |
Result |
not |
True if is false, false if is true |
and |
True if and are both true, otherwise false |
or |
True if either or are true, otherwise false |
Return to top
Logical Expressions
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:
- in is true if is a member of ;
- not in is false if is a member of ;
- exists { in } is true if some in has being true;
- forall { in } is true if all in have being true;
- within is true if all the elements in are in ;
- not within is true if some element in is not in .
Logical expressions can be built up from other logical expressions,
binary parameters and
logical operators.
Return to top
Conditional Expressions
A conditional expression is very much like the
IF
function in Microsoft Excel:
param ifvalue := if then [else ];
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,
. Note that if the
else
keyword is present, then no
;
needs to be included after
.
Return to top
Conditional Structures
A conditional structure is the same as the classical
if_-_then_-_else statement in programming languages like MATLAB, Fortran, Visual Basic and C++:
if then ; [else ;]
Note 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 then { } [else { }]
Return to top
Binary Parameters
In AMPL we can create
binary parameters by using the
binary
keyword in the parameter declaration:
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:
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 := if then 1;
You can also set binary parameters within
conditional structures
binary ; if then let := 1; else let := 0;
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:
Some example from depth first searching or column generation
Coming soon! and controlling
conditional loops:
Some example from depth first searching or column generation
Coming soon!
Return to top
--
TWikiAdminGroup - 18 Mar 2008