Логические выражения появляются там, где требуется значение true или false: в операторах проверки check, части "such that" индексных выражений (после двоеточия), a также в выражении if lexpr then expr [ else expr].
Логическое выражение, обозначаемое как lexpr, может не содержать переменных. Числовые значения, которые появляются в любом из этих контекстов, неявно приводятся к логическим значениям: 0 интерпретируется как false, а все остальные числовые значения как true.
Общий вид логических выражений
Логические выражения в AMPL могут иметь следующую форму:
Форма | Описание компонентов |
expr compare-op expr
Пример: 5 != X[i] |
expr - выражение содержащее number (числа), variable (переменные).
compare-op: <, <=, =, ==, !=, <>, >, >= |
lexpr logic-op lexpr
Пример: 5 <= X[i] || X[i] >= P[i] |
lexpr: expr compare-op expr
logic-op: or ||, and && |
not lexpr | Пример: not 5 = X[i] |
member in sexpr | где, sexpr – Выражение набора
member - произвольные постоянные выражения. Пример: 5 in PROD |
member not in sexpr | Пример: 5 not in PROD |
sexpr within sexpr | Пример: PROD2 within PROD |
sexpr not within sexpr | Пример: PROD2 not within PROD |
opname indexing lexpr | где, opname: exists либо forall
Пример: forall {I in PROD} P[i] > 2; |
Ниже приведен список логических операторов поддерживаемых AMPL:
Принятая запись | Альтернативная запись | Тип операнда | Тип результата |
if - then - else |
logical arithmetic |
arithmetic | |
or | || | logical | logical |
exists forall | logical | logical | |
and | && | logical | logical |
not (unary) | ! | logical | logical |
<, <=, =, <>, >, >= | <, <=, =, ==, !=, >, >= | arithmetic | logical |
in, not in | object,set | logical | |
within, not within | object,set | logical |
Экспонирование и if-then-else являются правоассоциативными. Остальные операторы левоассоциативны. Логический операнд if-then-else появляется после if, а арифметический операнд после then и (необязательно) else.
exists & forall
Логические операторы exists и forall по сути, являются итерационными аналогами or и and. При применении к пустому набору, exists возвращает false, а forall возвращает true.
if-then-else
Форма | Описание компонентов |
if lexpr then sexpr else sexpr | expr - выражение содержащее number (числа), variable (переменные).
compare-op: <, <=, =, ==, !=, <>, >, >= lexpr: expr compare-op expr sexpr – выражение набора interval, интервалы infinite-set, бесконечные наборы indexing, индексное выражение |