AMPL предоставляет специальные имена и выражения для определения общих интервалов и других наборов, которые либо бесконечны, либо потенциально очень велики. Индексные выражения не могут выполнять итерации по этим наборам, но они могут быть удобны для указания ограничивающих фраз в объявлениях наборов и параметров.
Интервалы действительных и целых чисел
Интервалы AMPL - наборы, содержащие все числа между двумя границами. Существуют интервалы действительных (с плавающей запятой) чисел и целых чисел, представленные ключевыми словами interval и integer соответственно. Они могут быть указаны как закрытые, открытые или полуоткрытые, следуя стандартным математическим обозначениям:
Закрытые, открытые и полуоткрытые интервалы
interval [a, b] ≡ {x: a ≤ x ≤ b}
interval (a, b] ≡ {x: a < x ≤ b}
interval [a, b) ≡ {x: a ≤ x < b}
interval (a, b) ≡ {x: a < x < b}
integer [a, b] ≡ {x ∈ I:a ≤ x ≤ b}
integer (a, b] ≡ {x ∈ I:a < x ≤ b}
integer [a, b) ≡ {x ∈ I:a ≤ x < b}
integer (a, b) ≡ {x ∈ I:a < x < b}
где a и b - любые арифметические выражения, а I обозначает множество целых чисел.
Например, мы можем записать:
param rate {PROD} in interval (0,maxrate];
слово interval может быть опущено.
Эта запись обозначает, что все значения param rate {PROD}
должны быть > 0 и <= maxrate;
Открытый интервал может быть задан с использованием предопределенного параметра AMPL Infinity в качестве правой границы или -Infinity в качестве левой границы.
param rate {PROD} in (0,Infinity];
эквивалентно: param rate {PROD} > 0;
Конструкции интервальных выражений
В целом, интервальные выражения могут быть использованы со следующими конструкциями:
in interval # все значения интервала
within interval # Подмножество значений интервала
ordered by [reversed] interval # упорядочить элементы набора согласно интервала
circular by [reversed] interval # Определить набор и упорядочить его в соответствии все значения интервала
В общем, интервалы не показывают что-то новое в объявлениях набора или параметров. Они просто дают альтернативные способы сказать что-то. Интервалы играют более важную роль в определении импортируемых функций.