Читайте также:
|
|
Теперь, когда вы умеете определять множества и атрибуты для хранения информации, вам необходимо иметь способ доступа к элементам этих множеств. Функция поэлементной обработки множеств @FOR позволяет получить доступ ко всем элементам множества и их атрибутам и выполнять над ними операции. Когда вы используете @FOR, LINGO создает и закрепляет за каждым элементом множества указатель и выполняет над ними указанные вами операции. Кроме того, вы можете использовать указатель в качестве индекса для доступа к конкретным элементам множества. Индексы для выражения типа Xi в LINGO записываются в виде X(I).
Синтаксис функции @FOR для поэлементной обработки множеств следующий:
@FOR(множество (список_индексов_множества) | квалификатор_условия:выражение);
Квалификатор_условия является необязательным. Если он используется, ему должен предшествовать символ вертикальной черты (|). По крайней мере должно присутствовать хотя бы одно выражения, хотя их может быть сколько-угодно и они должны отделяться друг от друга точкой с запятой.
Список_индексов_множества является необязательным. Если вы не используете его, то LINGO применяет выражение ко всем элементам множества. Если же вы его определили, то индексы отображаются на элементы множества, которое вы обрабатываете. Когда список_индексов определен, то эти индексы можно использовать в квалификаторе_условия. Приведенный ниже пример призван пояснить этот принцип.
Следующая модель иллюстрирует простое использование функции @FOR. Сама по себе модель не выполняет ничего сколь-нибудь полезного, за исключением, будем надеяться, иллюстрации того, как LINGO выбирает элементы из множества. В действительности модель просто возвращает результат вычитания 1 из каждого из чисел от 1 до 5.
MODEL
SETS:
NUMBER/1..5/:X;
ENDSETS
@FOR(NUMBER(I): X(I) = I -1);
END
Вольным переводом на русский работы этой функции @FOR будет примерно следующий:
Для каждого NUMBER (числа от 1 до 5) присвоить результат операции NUMBER – 1 переменной X(от 1 до 5).
LINGO перебирает все элементы множества, выполняя вычитание для каждого элемента.
После решения модели будет получен следующий результат:
VARIABLE VALUE
X(1).0000000
X(2) 1.000000
X(3) 2.000000
X(4) 3.000000
X(5) 4.000000
Без сомнения вы и так знаете, что уменьшая 1 на единицу, получим 0. Тем не менее, сам продемонстрированный здесь принцип является достаточно мощным. Вы можете использовать функцию @FOR для выполнения арифметических операций, для включения или исключения из множества элементов, основываясь на выбранном вами условии, и, что самое важное в LINGO, выполнять линейную и нелинейную оптимизацию над множеством. Когда вы видите, что более или менее реальная модель имеет множества со многими элементами, то возможность использования единственного оператора @FOR для записи ограничения, применимому к каждому из многих элементов множества, оказывается чрезвычайно полезным свойством.
Дата добавления: 2015-11-16; просмотров: 58 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пример для Windows | | | Использование других функций поэлементной обработки множеств с условиями |