forall(i in Parameters : i <> Calories) 


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



ЗНАЕТЕ ЛИ ВЫ?

forall(i in Parameters : i <> Calories)

Поиск

subject to

{ forall(i in Parameters : i <> Calories)

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

sum(j in Products) a[Calories,j]*x[j] <= b[Calories];

};

 

Символ “двоеточие” здесь понимается как выражение “такой, что”, знак “<>” означает “не равно”. Приведенный вариант хотя и является работоспособным, содержит существенный недостаток. Наличие в файле модели элемента Calories нарушает принцип отделения данных от модели.

 

Для решения этой проблемы определим в модели новую константу, которую назовем “особым параметром”:

 

Parameters SpecParam =...;

В файле данных присвоим ему значение

 

SpecParam = Calories;

Теперь ограничения перепишутся в виде:

 

subject to

{ forall(i in Parameters : i <> SpecParam)

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

sum(j in Products) a[SpecParam,j]*x[j] <= b[SpecParam];

};

Показанный прием очень полезен при решении задач о потоках, где среди узлов сети выделяются два “особых”: источник и сток.

 

В заключение покажем особенности постановки задачи целочисленной оптимизации. Добавим в нашем примере условие целочисленности переменных xj. Вариант определения переменных с использованием int+выдает ошибку компилятора, которая объясняется тем, что алгоритм целочисленной оптимизации не может работать с бесконечной областью определения переменных. Ограничить пределы изменения переменных можно следующим образом: задать конечное множество целых чисел и использовать его для определения вектора x.

 

range RangeX 1..1000;

var RangeX x[Products];

 

Верхняя граница (в данном случае 1000) задается пользователем. Для сохранения принципа отделения данных от модели эту величину следует вынести в файл данных.

 

Если в оптимальном решении задачи какая-либо компонента вектора x равна 1000, то, скорее всего, это означает, что данное значение недостаточно велико, и область допустимых значений задачи была «обрезана». Если же подобная ситуация повторяется после его замены на достаточно большую величину, то в таком случае можно сделать вывод о неограниченности целевой функции на допустимом множестве, т.е. задача не является разрешимой.

 

 



Поделиться:


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

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