Лекция: Декларации компонент модели
В дальнейшем для формального описания операторов используемформу Бэкуса—Наура (сокр. БНФ, Бэкуса—Наура форма) — формальную систему описания синтаксиса, в которой одни синтаксические категории последовательно определяются через другие категории. БНФ-конструкция состоит из предложений вида
<определяемый символ> ::= <посл.1> | <посл.2> |... | <посл.n>,
описывающих правила. Такое правило означает, что символ <определяемый символ> может заменяться на одну из последовательностей посл.1, посл.2, ..., посл.n. Знак определения обычно выглядит как ::=. Кроме того, используются квадратные скобки: [A] — элемент A входит или не входит.
Декларации объектов модели AMPL имеют следующий общий вид
<объект> <имя объекта> [<алиас>] [<индексное выражение>] [<тело>]
<объект>::= set | param | var | arc | minimize | maximize | subject to | node
Декларации параметров
Параметрами могут быть скалярные величины, векторы, матрицы и массивы известных данных. Декларация параметра имеет вид:
param <имя_переменной> <алиас> <индексное_выражение> <атрибуты>;
<алиас> ::=<литерал>
<индексное выражение>::=<set_expression_list
<арифметический_оператор>::=+ | — | less | * | / | mod | div | ^| ** |
<унарный оператор>::= + | -
<оператор редукции>::= sum | prod | max | min
Необязательные атрибуты деклараций параметров могут разделяться запятыми, ниже приведены указанные атрибуты:
Атрибут: | Примечание |
binary | Ограничивает возможные значения переменной 0 или 1. |
integer | Ограничивает возможные значения переменной целочисленными значениями |
symbolic | Если задано symbolic, то должно также быть заданы in sexpr, а также исключаются атрибуты, требующие задания числовых значений, такие как >=<выражение> |
>= <выражение> | >= задает нижнюю границу |
<= <выражение > | <= задает верхнюю границу |
:= < выражение > | := задает начальное значение |
default < выражение > | Задает значение по умолчанию для начальных значений, которые могут быть заданы в разделе данных data |
= < выражение > | Задает определенную переменную |
AMPL позволяет определять параметры через другие, ранее определенные, параметры. Параметры могут также вычисляться и определяться рекурсивно. Например, для числа сочетаний по из предметов может быть определено, используя следующую декларацию
param comb {i in 0..n, k in 0..m} :=
if k = 0 or k = i then 1 else comb[i-1,k-1] + comb[i-1,k];