Наборы различаются по:
- типу содержащихся данных (литеральные или числовые);
- способу заполнения данными (фиксированные, динамические, частный случай динамических наборов - пустые наборы);
- размерности (одномерные и многомерные);
- упорядоченности элементов (упорядоченные, неупорядоченные).
Литеральный набор
Литеральный набор - набор, элементы которого являются строками. Например coils, FISH, New_York, 486/33C, 23RPFG являются элементами литерального набора. Обычно, содержание строк выбирается так, чтобы быть узнаваемыми, coils, FISH, New_York, но они также могут быть кодами, известными только разработчикам моделей 23RPFG, 486/33C.
model: set PROD = {"coils", "FISH", "New_York", "486/33C", "23RPFG"}; data: set PROD = {coils, FISH, New_York, 486/33C, 23RPFG};
Строка, которая появляется в модели AMPL, должна быть разделена кавычками, одинарными ’A & P’ или двойными "Bell + Howell". Во всех контекстах прописные и строчные буквы различны, так что, "fish", "Fish", и "FISH" представляют различные элементы набора. Символ-разделитель должен быть обернут, если он появляется внутри строки: 'x'y', содержащего три символа x'y. Используемый разделитель ' ' или " " не имеет значения для интерпретации модели. ’Abc’ или "Аbc" обозначают одну и ту же строку(литерал). Литералы отличаются от числовых констант: 1 и '1' имеют разные значения.
Числовой набор
Числовой набор - элементы набора могут быть числами. Например: 1, 2, 3, 4... Фактически, элементы набора могут быть смесью чисел и строк, однако это редко имеет практический смысл. В модели AMPL буквенное число 1E+2 записывается обычным способом: в виде последовательности цифр, необязательно с предшествующим знаком, содержащим необязательную десятичную точку, и необязательно, с последующим показателем степени. Показатель степени задается одной из букв d, D, e или E, необязательно знака и последовательности цифр. Число 1 и соответствующая строка "1" различны. Напротив, разные представления одного и того же числа, такие как: 100, 1E+2, обозначают один и тот же элемент набора.
model: set nodes = {1,2,3,4}; data: set nodes = {1,2,3,4};
Фиксированный набор
Фиксированный набор - набор с фиксированным количеством входящих в него элементов. Использование оператора «=», часто полезно при объявлении фиксированных наборов, с целью определения набора в терминах других наборов и параметров. В этом случае, часто используются операторы наборов union, diff, symdiff, inter.
Пустой набор
Использование "{}" пустых фигурных скобок (без элементов) в режиме model - обозначает пустой набор, который затем может изменить свой размер, при определении данных в режиме data или с использованием оператора let.
Одномерный набор
Одномерный набор - набор, с одним параметром, характеризующим его количество элементов. Например, следующий набор состоит из 3-х строковых элементов: A, b, c.
model: set nodes = {"А", "b", "c"}; data: set nodes = {A, b, c};
Если одномерный набор состоит из элементов выражений, тогда его запись будет:
{Т, t+1, t+2};
Многомерный набор
Для многомерного набора каждый элемент должен быть записан в виде списка, перечисленного в скобках через запятую:
1
|
2
|
model: set nodes = { ("B1", "A1"), ("B1", "A2"), ("B1", "A3"), …("B3", "A3") } model: set nodes = { ("А", 2),…("а", 3),…("B", 5) } model: set nodes = { (1,2,3), (1,2,4), (1,2,5), (1,3,7), (1,4,6) } – трехмерный набор
Каждый элемент "А", "b", "c" или ("B1", "A1"), ("B1", "A2")…("B3", "A3") набора должен быть уникальным (т.е. в наборе не должны повторяться его элементы) и включать в себя одинаковое количество компонентов (размерность набора).
Одномерный набор из 3-х элементов |
Двумерный набор из 3-х элементов |
|||||
Элементы набора |
"А" |
"b" | "c" | ("B1", "A1") | ("B1", "A2") |
("B3", "A3") |
Количество компонентов |
1 |
1 | 1 | 2 | 2 |
2 |
Элемент набора ("1","A1") не идентичен элементу (1,"A1") или ("A1", 1).
Упорядоченный набор
Некоторые наборы явно упорядочены, например арифметические прогрессии, интервалы, подмножества упорядоченных наборов, if выражения, чьи предложения then и else являются упорядоченными наборами.
Числа часто используются для представления объектов, таких как периоды времени, порядок которых важен для спецификации модели.
Не упорядоченный набор
Самый простой вид набора в AMPL - это неупорядоченный набор символьных строк. Обычно, все строки в наборе предназначены для представления экземпляров одного и того же вида объектов, таких как сырье, продукты, фабрики или города и т.д. Часто, содержание строк выбирается так, чтобы быть узнаваемыми coils, FISH, New_York, но они также могут быть кодами, известными только разработчикам моделей 23RPFG, 486/33C. Литеральная строка, которая появляется в модели AMPL, должна быть разделена кавычками, одинарными ’A & P’ или двойными "Bell + Howell". Во всех контекстах прописные и строчные буквы различны, так что, "fish", "Fish", и "FISH" представляют различные элементы набора.