!........содержимое 1-го внешнего файла;
Ml М2 Demandl Demand2
!........ содержимое 1-го внешнего файла;
6412-1101
Рис. 2.15. Содержимое внешних файлов для модели Reddy Mikks
#-------------------------------определение множеств модели
set Constr; #множество ограничений
set Var; #множество переменных
#----------------------------задание имен элементам модели
param С (Var); коэффициенты целевой функции
param Rhs (Constr) ; #правые части ограничений
param Aij (Constr, Var); #коэфф. левых частей ограничений
#------------------------------------задание переменных
var X (Var) >= 0; #условие неотрицательности
#------------------------------------задание модели
maximize Total: sum (j in Var) C[j]*X[j]; #целевая функция Subject to Restrictions (i in Constr) : Ограничения
sum (j in Var) Aij [i, j]*X[ j] <= Rhs[i];
#------------------------------------данные для модели
data,-
set Constr := Ml M2 Demandl Demand2; set Var := XI X2;
param Rhs | | |
| | |
| | |
| Demandl | |
| Demand2 | |
param Aij | | |
| | |
| | |
| | |
Demandl | | |
Demand2 | | |
param С := | = XI 5 X2 | |
Puc. 2.16. Листинг AMPL модели Reddy Mikks
Далее оператор var задает имя X (имя определяется пользователем) для переменных множества Var. В отличие от программы LINGO, где все переменные по умолчанию предполагаются неотрицательными, в AMPL все переменные изначально предполагаются свободными. В модели Reddy Mikks переменные ограничиваются условием неотрицательности, поэтому добавляется выражение X{Var}>=0.
После задания имен переменных пользователь определяет имена целевой функции (Total в данном случае) и ограничений - Restrictions. Эти имена используются в выходном отчете программы.
В последнем разделе листинга задаются входные данные модели. Отметим, что данные от имен данных в операторах set и param отделяются символами :=.
В моделях AMPL, как и в моделях LINGO, входные данные не обязательно должны включаться в саму модель. В LINGO для присоединения внешних файлов
сданными использовался оператор @FILE (см. рис. 2.14). В AMPL ситуация несколько иная, поскольку эта программа выполняется в среде DOS (а не Windows). Однако и эта программа позволяет сохранять данные, включая спецификацию модели, во внешних файлах, а затем во время исполнения извлекать эти данные. Например, чтобы найти решение модели Reddy Mikks, в среде программы AMPL надо выполнить следующие команды:
ampl: model ch2AmplReddyMikks.mod; ampl: solve;
Здесь в файле ch2AmplReddyMikks.mod содержится вся спецификация модели, представленная в листинге на рис. 2.16, включая исходные числовые данные. Если числовых данных в этой спецификации нет (т.е. в листинге на рис. 2.16 отсутствует раздел data), но они содержатся в отдельном файле ch2AmplReddyMikks.dat, следует использовать такие команды, ampl: model ch2AmplReddyMikks.mod; ampl: data ch2AmplReddyMikks.dat; ampl: solve;
Вывод на экран результатов расчета (как и входных данных) обеспечивает команда display. Для примера рассмотрим следующие команды (они должны выполняться после команды solve), ampl: display Total; ampl: display X, rc; ampl: display Restrictions; ampl: display Aij, Rhs;
Первая команда выводит на экран значение целевой функции Total, вторая - значения переменных X и приведенные стоимости (параметр гс). Третья команда выводит значения, связанные с ограничениями. Последняя команда отображает значения массива Aij коэффициентов левых частей ограничений и значения Rhs - правых частей ограничений.
УПРАЖНЕНИЯ 2.4
1. На рис. 2.17 показаны выходные результаты, полученные с помощью программы TORA для задачи "диеты" из примера 2.2.2.
a) Интерпретируйте двойственную цену первого ограничения.
b) Найдите новое оптимальное решение, если необходимо ежедневно производить не менее 900 фунтов пищевой добавки.
c) Если стоимость кукурузной изменится до 0,40 долл. за один фунт при неизменной цене соевой муки, то будет ли текущее решение оптимальным?
2. Задача ЛП из упражнения 2.3.1.7 формулируется следующим образом.
Максимизировать г = 18х, + 9х2 при выполнении условий
24х, + 8х2<60 ООО, х, < 2000, х2 < 6000,
xv х2>0,
где х, и х2 - количество производимых консервным заводом упаковок томатного сока и томатной пасты соответственно. Решение этой задачи приведено на рис. 2.18.
LINEAR PROGRAMMING OUTPUT SUMMARY
Title: Diet Problem, Example 2.2-2 | | | |
Final Iteration No.: | | | | |
Objective Value = | 437.65 | | | |
Variable | Value | Obj Coeff | Obj Val Contrib | |
x1: corn | 470,59 | 0,30 | 141,18 | |
x2: soybean | 329,41 | 0,90 | 296,47 | |
Constraint | | Slack-/Surplus+ | | |
1 (>) | 800,00 | 0,00 | | |
2(<) | 0,00 | 0,00 | | |
3(>) | 0,00 | 10,82+ | | |
•"Sensitivity Analysis*" |
Variable | Current Obj Coeff | Min Obj Coeff | Max Obj Coeff | Reduced Cost |
x1: corn | 0,30 | -0,63 | 0,90 | 0,00 |
x2: soybean | 0,90 | 0,30 | infinity | 0,00 |
Constraint | Current RHS | Min RHS | Max RHS | Dual Price |
1 (>) | 800,00 | 0,00 | infinity | 0,55 |
2(<) | 0,00 | -138,00 | 168,00 | -1,18 |
3(>) | 0,00 | -infinity | 10,82 | 0,00 |
Рис. 2.17. Выходной отчет программы TORA
a) Определите единичную стоимость дополнительного фунта помидоров.
b) Изменится ли оптимальное решение, если склад сможет принимать больше упаковок томатного сока? А при увеличении емкости склада для упаковок томатной пасты?
c) Найдите новое оптимальное решение, если компания уменьшит объем перерабатываемых помидоров до 50 000 фунтов за смену.
3. Решите задачу "диеты" из примера 2.2.2 с помощью:
a) средства Excel Поиск решения;
b) программы LINGO;
c) программы AMPL.
2.5. ПРИМЕРЫ МОДЕЛЕЙ ЛП
В этом разделе исследовано несколько реалистических моделей ЛП, в которых определение переменных и построение целевой функции и ограничений не так однозначно, как в ранее рассмотренных моделях с двумя переменными. Использование программы TORA позволит интерпретировать результаты решения этих задач ЛП.