sum(j in Products) a[i,j]*x[j]>=b[i]; 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

sum(j in Products) a[i,j]*x[j]>=b[i];

Поиск

{ forall(i in Parameters)

sum(j in Products) a[i,j]*x[j]>=b[i];

};

 

Файл example.dat:

 

nProducts = 2;

Parameters = {Protein,Lipide,Carbohydrate,Calories};

b = [8,6,10,8];

c = [3,4];

a = [[1,2],

[4,5],

[2,1],

[2,3]];

 

Комментарий.Файл модели начинается с описания структуры данных задачи. Строка “int+ nProducts=...;” определяет целую неотрицательную величину nProducts. Наряду с типом “int+”существуют типы int, float, float+. Выражение “=...;”означает, что числовое значение считывается из файла данных.

 

Оператор rangeопределяет множество целых чисел в заданном диапазоне. Так, в нашем примере при значении nProducts = 2 определяется множество Products={1,2}.

 

Оператор enum определяет множество строк заданное перечислением элементов: Parameters = {Protein,Lipide,Carbohydrate,Calories}. Так как OPL Studio не поддерживает русский язык, элементы “белки, жиры, углеводы, калории” написаны по-английски. Осмысленные названия элементов множества воспринимаются гораздо легче, чем числа, поэтому рекомендуется по возможности задавать множества при помощи enum.

 

Далее множества используются для индексирования элементов массивов. Так, в строке “int b[Parameters]=...;”заводится массив целых чисел. Индексы могут не являться числами, например, требуемым количеством белка в нашем случае будет величина b[Protein], значение которой равно 8.

 

Определенные таким образом данные задачи являются константами, и не могут изменяться в процессе выполнения алгоритма. Изменяемой частью являются переменные, определенные ключевым словом var.

 

Задание целевой функции начинается с ключевого слова minimizeили maximize. Запись “sum(j in Products) c[j]*x[j]” соответствует выражению c1x1 + ... + cnxn. Заметим, что здесь точка с запятой в конце строки не ставится.

 

Ключевое слово “subject to” вводит блок описания ограничений задачи. Запись forall(i in Parameters)означает “для всех i из множества Parameters ”. Данный блок соответствует ограничениям ai1x1 + ... + ainxn ³ bi, i=1,...,4. Ограничения x1 ³ 0, ... , xn ³ 0 здесь указывать не требуется, так как они уже учтены при описании переменной x при помощи ключевого слова float+.

 

Для иллюстрации некоторых особенностей языка, изменим задачу следующим образом: пусть величина b[Calories]задает теперь не минимальное, а максимальное содержание калорий (“диета для похудения”). Тогда ограничения задачи переписываются в виде:

 

ai1x1 + ... + ainxn ³ bi, i=1,...,3,

a41x1 + ... + a4nxn  ≤ b4.

 

На языке OPL это можно записать следующим образом:



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 47; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.007 с.)