Промышленный лизинг Промышленный лизинг  Методички 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292

построения этих пакетов заключается в том, чтобы иметь готовую пустую алгебраическую модель ЛП и затем на основе предоставляемых данных сформировать конкретную модель. Эти данные могут быть встроены в модель либо могут считы-ваться из внешних файлов и из файлов электронных таблиц. Это делает модель исключительно гибкой, позволяя настраивать ее под те или иные данные.

А В С D Е

1 , Microsoft Excel 10.0 Отчет по устойчивости

2 s Рабочий лист: [ch2SolverReddyMikks.xlsJJlHCTl

Н Г

5 1 Изменяемые ячейки

6 i Результ. Нормир. Целевой Допустимое Допустимое

7 Ячейка Имя значение стоимость Коэффициент Увеличение Уменьшение

8 . $В$13 Решение х1 3

9 i $С$13 Решение х2 1,5

3 , 0,666666667

Л1 [Ограничения

J2j Результ. 13 Ячейка Имя значение

Теневая Цена

Ограничение Правая часть

Допустимое Увеличение

Допустимое Уменьшение

J4 $D$6 Сырье М1 Всего 24 15 $D$7 Сырье М2 Всего 6 18- $D$8 Спрос 1 Всего -1,5 17; $D$9 Спрос 2 Всего 1.5

0,75 0,5 0 0

24 6 1 2

0,666666667 1Е+30 1Е+30

4 2 2,5 0.5

-ТО - -, ,

И - МЛ Отчет по устойчивости 1 / Лист! /

I мг

Рис. 2.11. Отчет по устойчивости

В этом разделе кратко опишем два популярных пакета решения задач оптимизации: LINGO и AMPL. Это описание по понятным причинам не будет очень подробным и всесторонним, но, вместе с тем, даст общее представление о том, как работают эти пакеты. Оба этих пакета имеют специальные обучающие версии, которые можно загрузить с Web-узлов www. lingo. com и www. ampl. com.

Моделирование в LINGO. На рис. 2.12 показан листинг модели Reddy Mikks, созданный в LINGO (файл ch2LingoReddyMikks.lng). В этом листинге служебные слова LINGO записаны прописными буквами и выделены полужирным начертанием (на самом деле язык LINGO не чувствителен к регистру символов), остальные элементы листинга записаны пользователем.

В листингах LINGO строки, начинающиеся с восклицательного знака, являются комментариями и игнорируются процессором LINGO. Все стандартные операторы, включая комментарии, должны заканчиваться точкой с запятой. Служебные слова MODEL, SETS и DATA должны заканчиваться двоеточием, однако служебные слова END, ENDSETS и ENDDATA (закрывающие операторные скобки) не требуют в конце каких-либо знаков препинания.

В модели на рис. 2.12 входные данные содержатся внутри модели, что не удобно, если необходимо найти решение одной и той же модели для разных исходных данных. Ниже мы покажем, как можно выйти из этой ситуации путем сохранения данных в отдельных внешних файлах.

Оператор TITLE предваряет название модели. В операторных скобках SETS: ENDSETS пользователем вводятся имена основных компонентов модели ЛП - ог-



раничений, переменных и матрицы, содержащей коэффициенты функций ограничений. Важно отметить, что эти данные определяются пользователем до начала использования модели. На рис. 2.12 видно, что мы использовали имена Constr (Ограничения), Var (Переменные) и ConsVar(Constr,Var) (это массив коэффициентов, размерности ConstrxVar). Конечно, вы можете использовать любые другие

Шодель Reddy Mikks - данные внутри модели; MODEL:

TITLE Reddy mikks model;

I--------------------алгебраическое определение модели ЛП;

SETS:

Constr: Rhs; Var: С, X;

ConsVar (Constr, Var) : Aij ; ENDSETS

1------------------------------------построение модели;

MM-esUM( Var(j) : C(j)*X(j) ); ! целевая функция;

SFOR( Ограничения;

Constr (i) : esiM( Var (j) : Aij (i, j ) *X (j) )<=Rhs (i) ) ;

I------------------------------------данные для модели;

DATA:

Constr = Ml M2 Demandl Demand2; Rhs = 24 6 1 2; Var = XI X2; С = 5 4; Aij =64

-1 1

0 1;

E HDD AT A END

Рис. 2.12. Листинг LINGO модели Reddy Mikks

имена по вашему выбору. Ограничения имеют числовые значения правой части, вектор этих значений назовем Rhs (от Right-hand side - правая часть). Отношение между ограничениями и их правыми частями задается оператором Constr: Rhs; Аналогично оператор Var: С, X;

указывает, что каждой переменной X соответствует в целевой функции коэффициент С (X и С - векторы). Наконец, матрица, содержащая коэффициенты функций ограничений, названа Aij с помощью оператора

ConsVar(Constr,Var): Ai j ;

Теперь заданы все элементы, необходимые для построения алгебраической модели. Используя фиктивный индекс j для представления переменной у, целевая функция строится как

MAX=@SUM( Var(j): C(j)*X(j) );

Этот оператор задает целевую функцию как сумму произведений C(j)*X(j), причем сумма берется по всем элементам множества Var(j). Ограничение i строится следующим образом:

Constr (i) :@STJM( Var(j): Aij (i, j ) *X (j ) )<=Rhs(i)



Для вычисления всех ограничений из множества Constr(i) используется цикл

@FOR(Constr(i):

@SUM( Var(j): Aij(i,j)*X(j) )<=Rhs(i) ) ;

Отметим, что тело цикла @FOR ограничивается круглыми скобками.

Последний раздел листинга на рис. 2.12 содержит данные, подставляемые в алгебраическую модель. Так, множество Constr определяется как множество из четырех ограничений, названных Ml, М2, Demandl и Demandl (Cnpocl и Спрос2). Отметим обязательные пробелы между именами - по их числу определяется количество элементов в множестве. В следующей строке вектору Rhs присваиваются значения правых частей ограничений 24, 6, 1 и 2. Элементам множества Var обычно даются имена XI и Х2 (если модель имеет только две переменные). Соответственно, С присваиваются два элемента, 5 и 4, значения коэффициентов целевой функции. Наконец, массиву Aij присваиваются значения коэффициентов левых частей ограничений в соответствии с определением множества ConsVar(Constr,Var). Не обязательно помещать элементы каждого ограничения в отдельной строке, как в листинге на рис. 2.12. Здесь это сделано для удобства чтения.

По умолчанию в LINGO предполагается, что все переменные неотрицательны. Свободные переменные (т.е. такие, которые могут принимать как положительные, так и отрицательные, значения) задаются с помощью оператора @FREE. Например, если Х2 - свободная переменная, то в модели она должна быть описана оператором @FREE(X(2));

Этот оператор можно вставить в любое место листинга после оператора ENDSETS, даже в оператор цикла.

Стандартный выходной результат работы программы LINGO представлен на рис. 2.13. Оптимальное решение записано как Х(Х1) = 3 и Х(Х2) = 1.5 со значением целевой функции 21. В нижней части выходного отчета выводится список значений дополнительных переменных для каждого ограничения (строки 2- 5) вместе с соответствующими двойственными ценами (столбец Dual Prices). В строке 1 приведено значение целевой функции. Остальные значения в выходном отчете повторяют входные данные модели.

Выходной отчет программы LINGO можно настраивать, выводя только необходимые данные. Отметим, что в этот отчет не включаются автоматически результаты анализа чувствительности оптимального решения. Вместе с тем LINGO предоставляет возможности проведения такого анализа и вывода его результатов.

Мощность и гибкость таких программ, как LINGO, заключается в том, что входные данные модели не обязательно должны быть включены непосредственно в модель, как это сделано в листинге на рис. 2.12. Входные данные могут находиться во внешних файлах. На рис. 2.14 показан листинг модели Reddy Mikks, где с помощью оператора @FILE присоединяются два внешних файла. Содержимое этих файлов показано на рис. 2.15. Таким образом, заменяя эти файлы другими, можно просчитывать модель для разных входных данных.

Моделирование в AMPL. Используем ту же модель Reddy Mikks для описания работы программы AMPL. На рис. 2.16 показан листинг этой модели, созданный в AMPL (файл ch2AmplReddyMikks.mod). Как и в примере LINGO, служебные слова AMPL здесь выделены полужирным шрифтом.

Первым в листинге стоит оператор set, определяющий ограничения и переменные модели с помощью задаваемых пользователем имен Constr и Var (мы сохранили здесь имена из модели LINGO для того, чтобы можно было сравнить модели



1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292