Операторы сравнения
Значения арифметических выражений можно сравнить друг с другом с помощью операторов сравнения:
= равно
<> не равно
< меньше
<= меньше либо равно
> больше
>= больше либо равно
Результатом сравнения являются true, либо false. Выражение: T>1 истинно, если параметр T имеет значение больше 1, и ложно в остальных случаях. Выражение:
sum {i in ORIG} supply[i] = sum {j in DEST} demand[j]
верно, если и только если общий объем предложения равен общему спросу.
Сравнения являются одним из примеров логических выражений AMPL. Проверка членства с помощью in и within, является еще одним примером логических выражений. Более сложные логические выражения могут быть созданы с помощью логических операторов.
And & or
Оператор and возвращает true, когда оба его операнда имеют значение true. Оператор or возвращает истину, когда хотя бы один из его операндов имеет значение true. Унарный оператор not возвращает false для true и true для false. Таким образом, выражение:
T >= 0 and T <= 10
верно, только если T находится в интервале [0, 10]. А выражение:
i in MAXREQ or n_min[i] > 0
истинно, если i является элементом MAXREQ, или n_min[i] положительно. Или оба выражения возвращают true. Операторы сравнения, членства или арифметического действия имеют более высокий приоритет, чем логические операторы. and имеет более высокий приоритет, чем or, в то время как not имеет самый высокий приоритет. Таким образом, выражение:
not i in MAXREQ or n_min[i] > 0 and n_min[i] <= 10
идентично:
(not (i in MAXREQ)) or ((n_min[i] > 0) and (n_min[i] <= 10))
В качестве альтернативы можно использовать оператор not in:
i not in MAXREQ or n_min[i] > 0 and n_min[i] <= 10
С иерархией приоритетов действия операторов в AMPL, можно ознакомиться в Арифметические выражения.