Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Оптимизация в LINDO

..pdf
Скачиваний:
10
Добавлен:
12.11.2023
Размер:
4.57 Mб
Скачать

 

.LALIN D U \ PR IM 3J . L T X

 

bin 5x11+8x12+7x13+2x14+X15*6x21+3x22+5x2^

 

 

^4x24*6x?5+7x31+4x32+2x33+3x34*2x35

 

•1st

 

l. x11+x12+x13*1(1tf+Srt5-220

 

[

X21«X22+X23+X24+X25*>140

 

I

x31+x32+x33+x34+x35«16Q

 

j

Xl1+X2i+x31-ee

 

 

x12*x22+x32-140

 

|

x13*x23+x33“ 90

 

; ,art4i-x24+x3ip=130

&

I

x15+x25+x35-80

!

х1з<йо

 

l

*?2<70

 

jendg-'- .

Рис. 19

H Reports Wtmlnw

 

 

 

 

m : r

Xit X X X X X X X X

X X X X X

 

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3l

t 2 3 4 5 1 2 3 Ji 5 1 2 3 4 5

 

1: 5 8 7 2 1

6 3

5 4 6 7 h 2 3 2

MIN

2: 1 1 1 1 1

*

'

- C

3: ■

•1 1

1*1 1

 

c

4:• • 1 1 1 1 1 = c

5: 1

 

1

■ 1

- в

6: • 1

 

1

 

1

- c

7:

1

• 1

 

1

- в

в:

 

1,

1

• 1

c

9:

 

1

• 1

 

■1 - в

10:

1

 

 

< в

11:

 

1

 

 

< в

Рис. 20

41

Справа от графического отчета расположены три кнопки с соответствующими им иконками. Верхний переключатель (иконка линза ео знаком, шпос) позволяет увеличивать изображение. Во включенном состоянии курсор мыши принимает вид увеличительной линзы. Теперь, щелкнув мышью на выбранной части матрицы, можно рассмотреть ее более детально в увеличенном формате. При этом можно двигаться по матрице, используя линейки перемещения. Например, часть матрицы транспортной модели (рис. 19) в увеличенном формате показана на рис. 21.

Рис. 21

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

В настоящее время графические отчеты ненулевой матрицы не могут бьггь напечатаны непосредственно из LINDO. Однако можно выполнить команду Сору из меню Edit, тем самым поместив ненулевую картину в буфер обмена Windows. Из буфера картина может бьпъ перенесена в любую графическую программу и из нее распечатана.

Basis Picture_____Alt+ 6

Эта|команда выдает текстовый отчет, содержащий "картину" текущего базиса, упорядоченные столбцы и строки, соответствующие последней инверсии базисной матрицы, выполненной при решении. Базисная "картина" посылается в окно отчетов. В отчете базисная матрица повернута на 90 градусов. Имена базисных переменных показаны слева. Имена строк, переменные которых в базисе, выводятся справа налево в верхней части отчета. Положительные целые коэффициенты от 1 до 9 приводятся явно. Для остальных ненулевых коэффициентов символ плюс (+) изображает положительные значения, а символ минус (-) - отрицательные.

Так, для нашей транспортной задачи после ее решения .и выбора команды Basis Picture отчет приведен на рис. 22.

42

iS Reports W indow

L. LJfT S

Г.

 

 

 

'I COLUMN

 

ROW

?j

0000000011

 

13528947610

 

S LK

Ю :

1

 

j;

X22:31

11

 

}j

X32:4

1 1

 

!|

X33:2

11

 

i| ART

:

 

 

 

X15:1

1 1

 

i!

X14:2

11

 

•?

X11:5

11

 

i

X21:611

 

|j ART

:

 

 

i

 

 

M

Рис. 22

LINDO может вьшолнять триангуляцию базиса некоторых моделей (т.е. все ненулевые элементы помещать над или под диагональю). Модели с таким базисом, как правило, решаются быстрее, чем нетреугольные. В приведенном примере имеем как раз такой случай.

Заметим, что в отчете не всегда может бьггь представлен полный состав базисных переменных. В таких.-сдагаях в отчете появляются переменные с именем ART. Это искусственные переменные, которые UNDO использует в начале решения, когда не может назначить базисную переменную для строки.

Tableau_________ Alt + 7

Эта команда показывает текущую симплекс-таблицу. Используется для исследования симплекс-алгоритма по шагам в совокупности с командой Pivot. Команда Tableau размещает имена переменных в верхней части отчета, номера строк - в первой колонке слева, базисные переменные во второй колонке, затем - текущие значения коэффициентов для каждой переменной и текущие значения правых частей (базисных переменных). Например, оптимальная симплекс-таблица модели фирмы "Кама" представлена на рис 23.

S

Reports Window

 

 

 

 

-

_ . J-J

III. I

L.

 

ШЩ

 

 

 

 

 

 

 

 

 

Г

 

 

 

 

 

 

 

 

 

 

 

Ш

5 THE TABLEAU

 

 

 

 

 

 

 

 

 

■■■■■

 

 

 

 

 

 

 

 

 

 

 

 

j

ROW

( B A S IS )

X1

X2

S LK

2

S LK

3

S LK

4

 

S

1

ART

 

0 .0 0 0

0 .0 0 0

 

1 .5 0 0

 

5 . 5 0 0

 

0 .0 0 0

 

2

S LK

5

0 .0 0 0

0 .0 0 0

 

0 .7 5 0

- 2 . 2 5 0

 

0 .0 0 0

 

2

3

 

ЗС2

0 .0 0 0

1 . 0 0 0

 

0 .5 0 0

- 0 . 5 0 0

 

0 .0 0 0

.-Xc;

i

4

S LK

4

0 .0 0 0

0 .0 0 0

- 1 . 5 0 0

 

1 . 5 0 0

 

1 .0 0 0

 

 

5

 

X1

1 .0 0 0

0 .0 0 0

- 0 . 2 5 0

 

0 -7 5 0

 

0 .0 0 0

 

I

ROW

S L K

5

 

 

 

 

 

 

 

 

н

1

 

0 . 0 0 0

1 0 0 .0 0 0

 

 

 

 

 

 

 

 

 

2

 

1 . 0 0 0

2.UUU

 

 

 

 

 

 

 

 

 

3

 

0 .0 0 0

3 . 0 0 0

 

 

 

 

 

 

 

 

ji

4

 

0 .0 0 0

5 .01)0

 

 

 

 

 

 

 

 

S

 

0 .0 0 0

5 .0 0 0

 

 

 

 

 

 

 

 

:Ш

Рис. 23

43

Для наблюдения внутренней работы решателя UNDO команду Tableau следует чередовать с командой Pivot.

Термин ART, как и выше, обозначает искусственные переменные. Термин «SLK п» обозначает дополнительную переменную (slack), которая вводится в неравенство (n-ю строку) для преобразования его в равенство. На 1-й фазе симплекс-алгоритма может быть показана дополнительная строка внизу таблицы, используемая для минимизации суммы неразрешимостей (иначе, невязок, которые имеют место при ненулевых искусственных переменных). Когда UNDO выполнит первое симплекспреобразование и установит допустимость полученного решения, эта строка будет удалена из таблицы.

Formulation_____ A lt+ 8

Команда Formulation используется для показа всех или выбранных сегментов модели в окне отчетов. Она выдает внутреннее представление модели UNDO, созданное из компилированного текста в окне модели. Таким образом, все комментарии и специальное форматирование будут убраны.

Для запуска команды Formulation сначала необходимо выбрать окно модели, для которого нужно сгенерировать отчет. Далее, запустив команду Formulation из меню Reports, можно задать параметры отчета в появившемся диалоговом окне (рис.24)..

Рис. 24

В группе Rows to view можно отобрать для просмотра все строки модели (АН) или только выбранные (Selected). Во втором случае становятся доступными поля труппы Selected rows и в них вводятся номера начальной и/или конечной строки. По умолчанию UNDO показывает все строки (активна опция All).

Отчет Formulation, как и все отчеты UNDO, согласуется с параметром ширины терминала.

Show Column

Alt + 9

Если команда Formulation позволяет видеть отдельные строки, то команда Show Column дает возможность увидеть детали отдельного столбца. Для использования команды Show Column сначала переходят в окно модели, затем запускают команду и в

44

появившемся диалоговом окне выбирают имя столбца (переменной) из списка Column to Show, который содержит имена всех переменных текущей модели. Например, для транспортной модели диалоговое окно представлено на рис. 25.

Рис. 25

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

Positive Definite

Эта команда применяется к квадратичным моделям для проверки гарантии получения глобального оптимума. Она исследует матрицу квадратичной формы целевой функции. Если матрица положительно определенная, тогда целевая функция квадратичной задачи выпуклая и найденное решение будет гарантированно глобальным. Более подробно этот вопрос рассмотрен в разделе квадратичного программирования.

Меню Window

Это меню содержит все команды, которые помогают в управлении различными окнами, открытыми LINDO. Ниже они рассмотрены более детально. Рад-команд являются стандартными для Windows 9х.

Open Command W indow________ Alt+C

LINDO имеет макроязык (командный язык) для доступа к его возможностям. (Для большей информации по командному языку см. “UNDO for Command-line Environments” в Help). Скриптовый файл, который содержит команды UNDO, может быть запущен командой Take Commands из меню File. Также можно интерактивно вводить команды в командное окно LINDO. Это окно открывается командой Open

45

Command Window. Двоеточие в левом верхнем углу окна - это подсказка-приглашение для команд LINDO. После него можно вводить модель и любые команды LINDO.

Open Status Window

Когда LINDO начинает решение, на экран выводится окно статуса. Это окно позволяет следить за процессом решения. Его можно закрыть в любое время и также восстановить в любой момент с помощью команды Open Status Window. Описание окна статуса приведено ранее при рассмотрении команды Solve.

Send to Back________ Ctrl+B

Эта команда помещает активное окно за всеми другими окнами на экране. Она частично используется для переключения между окном модели и окном отчетов, особенно когда окна максимизированы на весь экран и не видны нижние. Кнопка Send to Back на панели инструментов позволяет переключаться с помощью мыши.

Cascade________ CtrH-A

Команда расставляет все открытые окна каскадом от верхнего левого до нижнего правого, с текущим активным окном сверху.

Tile___________Alt+T

Команда Tile располагает все открытые окна как черепицу на крыше. При этом каждое окно изменяет свой размер так, что все окна будут видны целиком на экране и будут одинакового размера. Можно выбрать горизонтальную или вертикальную черепицу. При выборе горизонтальной (вертикальной) черепицы LINDO максимизирует каждое окно по горизонтали (соответственно, по вертикали). Если есть более трех открытых окон, то выбор горизонтальной или вертикальной черепицы не будет иметь большого эффекта.

Close Ail____________ Alt+X

Эта команда закрывает все открытые окна и диалоги. Если были сделаны изменения в окне модели без его сохранения, то перед закрытием появится запрос на сохранение. Любые изменения без сохранения будут потеряны при закрытии окон.

Arrange Icons_________Alt+I

Если минимизированы открытые окна, то они выглядят на экране как иконки. Команда Arrange Icons выравнивает все иконки, начиная с нижнего левого угла главного окна.

Меню Help

Меню Help содержит различные команды для удобного доступа к справке UNDO.

46

Contents

F I

Команда открывает окно помощи UNDO в секции оглавления. Из нее можно перейти к выбранному разделу, щелкнув на нем мышкой. Эта команда может быть вызвана с помощью кнопки с вопросом. Кнопки со стрелкой и вопросом используется для вызова контекстно-зависимого Help. Выбор этой’команды переводит курсор мыши в вопросительный знак. Подведя такой курсор к любой кнопке или команде в1меню, можйо получить по ней справку.

Search for Help On_______A lt+Fl

С помощью этой команды осуществляется поиск в справочной системе LINDО по ключевому слову или теме.

How to Use Help_________ Ctrl+Fl

Команда информирует пользователя о системе помощи UNDO.

About UN DO

Эта команда открывает системное окно, которое показывает информацию об используемом программном обеспечении. Первые четыре строчки окна показывают’ версию UNDO, номер, дату и копирайт (Copyright). Далее иконка UNDO, почтовый адрес, телефон, электронный адрес и Internet-адрес офиса компании. Эта информация может бьпъ использована для получения новой версии UNDO или другого программного обеспечения. Ниже приводится предельное число ограничений и переменных для данной версии UNDO. Пределы для ограничений и переменных для каждой версии UNDO свои: 100 & 200 для базовой, 500 & 1000 для супер, 2000 & 4000 для гипер, 8000 & 16000 для индустриальной, 32000 & 100000 для. расширенной. Предел ненулевых элементов может быть установлен по желанию пользователя. Для этого нужно войти в Options меню Edit. В группе параметров General поле Nonzero limit позволяет г установить желаемый предел ненулевых элементов. UNDO, использует это «пенулевое» пространство как рабочую область при оптимизации. UNDO сохраняет базисную инверсную матрицу вместе со структурой ненулевых элементов в этой выделенной области памяти. Можно попытаться, распределить дополнительное число ненулевых элементов сверх точно требуемого структурой этих элементов,-. Если L1NDO запустится без «ненулевого» пространства, то оптимизация будет прервана и LINDQ возвратит ошибку.

47

3. Целочисленное программирование

LINDO распознает два типа целых переменных: бинарные переменные и общие целочисленные переменные. Бинарные переменные могут иметь только значения 0 и 1. Они обычно используются для представления решений типа да/нет. Общие целочисленные переменные принимают неотрицательные целью значения (0,1,2,3, INTEGER и GIN операторы используются для идентификаций бинарных и целочисленных переменных соответственно. В модели эти операторы должны следовать после слова END. Вместо INTEGER допускается краткая запись INT.

Описание бинарного типа может быть выполнено двумя способами:

INTEGER <ИмяПеременной>

или

INTEGER <N>

Первая форма идентифицирует переменную <ИмяПеременной> как принимающую значения 0/1. Для каждой бинарной переменной записывается своя строка. Вторая форма идентифицирует первые N переменных в текущей задаче как принимающих значения 0/1. Порядок переменных определяется порядком их вхождения в модель. Этот порядок может быть проверен при рассмотрении порядка переменных в отчете о решении. Вторая форма более мощная, так как она позволяет определить сразу несколько целых переменных одной строкой, но для этого нужно знать порядок переменных в модели. Особое внимание требуется, если не все переменные входят в критерий. Если имеется несколько бипарных переменных, разбросанных по всем условиям модели, их лучше идентифицировать первым способом.

Целочисленные переменные общего типа идентифицируются оператором GIN. Команда GIN используется точно так же, как INT. Например, запись GIN 3 определяет первые 3 переменных целочисленными, a GIN Month делает целочисленной переменную с именем Month.

При решении задач целочисленного программирования (далее ЕР) используется метод ветвей и границ. Он осуществляет поиск последовательности все более лучших решений. Если LINDО находится в режиме вывода по умолчанию (verbose), то будет отображаться информация по ходу процесса поиска. Для установки краткого режима вывода сообщений используется меню Options, тогда будут выводиться только краткие сообщения при нахождении лучшего решения при поиске методом ветвей и границ.

По завершению процесса перебора ветвей и 1раниц выдается наилучшее найденное решение. Таким образом, команды генерирования отчета могут бьпъ использованы для проверки лучшего решения. В решении целочисленной модели относительные оценки и двойственные переменные, как уже отмечалось, не имеют ясной интерпретации и поэтому могут быть проигнорированы.

В используемом UNDO методе целочисленные переменные общего типа представляются непосредственно. Здесь не применяется так называемое расширенное бинарное представление (т.е. замена) общих целочисленных переменных как суммы 0/1 переменных. Для большинства практических задач метод бинарного расширения значительно увеличивает время решения.

Для иллюстрации рассмотрим небольшой пример с IP-моделью.

48

M IN X 1+3X 2 + 2X3 ST

2.5X1 + 3.1 ХЗ > 2

2 X + 7 Х2 + 4 ХЗ >5

END

INT3

Строка после END определяет три переменные как бинарные (0/1). После решения LINDO выдаст следующий отчет:

LP OPTIMUM FOUND AT STEP 3

 

OBJECTIVE VALUE = 2.25714278

 

SET Y TO >= 1 AT 1, BND= -4.000 TWIN- -3.000

12

NEW INTEGER SOLUTION OF 4.0000000 AT BRANCH 1 PIVOT 12 BOUND ON OPTIMUM: 3.000000

FLIP Y TO <= 0 AT 1 WITH BND= -3.00000000

NEW INTEGER SOLUTION OF 3.00000Q0 AT BRANCH 1 PIVOT 12 BOUND ON OPTIMUM: 3.000000

DELETE Y AT LEVEL 1

ENUMERATION COMPLETE. BRANCHES- 1 PIVOTS12

LAST INTEGER SOLUTION IS THE BEST FOUND

REINSTALLING BEST SOLUTION...

OBJECTIVE FUNCTION VALUE

1)3.0000000

VARIABLE

VALUE

REDUCED COST

XI

1.000000

l.ooooob

X2

0.000000

2.000000

X3

1.000000

3.000000

ROW

SLACK OR SURPLUS

DUAL PRICES

2)

3.600000

0.000000

3)

0.100000

0.000000

NO. ITERATIONS-

12

 

BRANCHES=

1

DETERM - 1.000E

0

Сначала показано оптимальное значение критерия в непрерывном решении (2.25714278), затем поиск целочисленного решения и, наконец, найденное оптимальное целочисленное решение в виде стандартного отчета.

Краткие сведения о методе решения

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

49

как непрерывной линейной (LP) в надежде получить целочисленное решение. Если же некоторые целые переменные оказываются дробными, то они отмечаются как переменные ветвления. Предположим, X должна быть целой переменной, однако в решении задачи как LP переменная X равна 3.7. Создаются две новые модели, в одну из которых добавляется ограничение Х<=3, а в другую - Х>=4, Такое ветвление продолжается пока есть дробные переменные и удовлетворяются условия разрешимости.

Если LINDO сначала.пойдет по ветви Х<=3 и будет находиться в режиме полного вывода (verbose), то выдаст сообщение,лодобное следующему:

SET X <= 3 АТ 1 WITH BND= 3.20000 TWIN= 2.80000.

Значение 3.2 означает, что на ветви с Х<=3 нет решений лучше, чем 3.2. Аналогично, нет решений лучше, чем 2.8 вниз по ветви с Х=>4. Когда UNDO позже вернется для проверки ветви Х>=4, то выведет сообщение:

FLIP X ТО >=4 AT LEVEL 1

После полной проверки всех потомков обеих ветвей будет напечатано:

DELETE X AT LEVEL 1

Выбор переменных для ветвления осуществляется по следующим признакам:

1)переменные, имеющие дробную часть около 0,5;

2)переменные, появляющиеся в задаче раньше;

3)переменные, сильно влияющие назначение критерия при их изменении.

На основе этих переменных LINDO может создать и использовать множество базового ветвления. Предположим, что в некоторой IP задаче переменные ХЗ, Х7 и Х8 имеют значение нуль при решении ее как LP. Если оценки этих переменных (reduced cost) большие (достаточные, чтобы эти переменные остались нулевыми), LINDO может создать две новые модели, альтернативно добавив отсечения Мартина (Kipp Martin); ХЗ + Х7 + Х8 = 0 или ХЗ + Х7 + Х8 >= 1. Когда добавится первое отсечение, будет выдано следующее сообщение: FIXING ALL VARIABLES WITH R O 9.2 (зафиксированы все переменные с оценкой >9.2). А когда второе отсечение заменит первое, появится сообщение: RELEASING FIXED VARIABLES (освобождены фиксированные переменные). Модель с первым ограничением исследуется первой в связи с возможностью быстро найти хорошее «округленное» решение. Эта стратегия множества базового ветвления иногда подходит для больших задач о рюкзаке, где простая стратегия базового ветвления переменной могла бы создать ошеломляюще большое число ветвей просто для поиска первого целого решения.

Когда используется множество базового ветвления, в отчете о решении появляются дополнительные строки, соответствующие отселениям, которые были добавлены. Эти ограничения будут удалены из задачи* когда процесс решения заверяются.'

Решение сложных целочисленных моделей

Показателем хорошей IP-модели является наличие большого числа целых переменных в ее решении как LP-задачи. Такой результат можно иногда предвидеть еще до решения. Если матрица коэффициентов содержит только 0, +1 и -1, тогда следующие признаки указывают на хорошую модель: каждый столбец имеет не более двух ненулевых элементов с противоположными знаками; каждая строка имеет не

50