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

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

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

RHS

RHS

2

30.0000000

RHS

3

70.0000000

RHS

4

160.0000000

ENDATA

то UNDO преобразует ее в более читаемый текстовой формат и выдаст на экран в виде:

МШ5Х1 +13X2: SUBJECT ТО

2)XI <= 30.

3)Х2 <= 70

4)XI + 3 Х2 <= 160

END

UNDO запоминает исходный формат. Таким образом, при записи модели на диск UNDO использует первоначальный формат, пока пользователь не переопределит иначе. См. также команду SAVE.

View______________ F4

Команда View читает записанный файл модёли с диска и размещает его в окно просмотра. В отличие от команды OPEN, которая использует окно редактирования, ограниченное файлами в 64000 символов или Меньше, команда View может читать файлы любого размера и ограничивается только размером доступной памяти.

Здесь можно прокручивать окно просмотра, использовать команду GO ТО для перехода на конкретную строку, команду Find/Replace для поиска и замены. Для редактирования больших моделей целесообразно обратиться к внешнему текстовому процессору (например, к Word), позволяющему1сохранять модель в формате “Только текст”. Такой файл можно загрузить в UNDO с помощью команды View.

Save_____________ F5

Save As__________ F6

Команды Save и Save As записывают содержимое активного окна в файл на диске. Команда Save использует существующее имя файла модели, тогда как Save As запрашивает имя файла, в котором нужно сохранить модель.

Диалоговое окно этих команд имеет все стандартные средства для управления записью в файл. Нестандартным является только список форматов «File Format». Доступные форматы описаны в табл. 2.

Заметим, что окно отчетов и окно команд могут сохраняться только в текстовом формате (*.ltx). Окна моделей могут быть сохранены в любом из трех форматов.

Когда *.1рк и *.mps файлы читаются обратно в UNDO, они автоматически преобразуются в *.ltx формат перед тем, как появятся на экране. Использование *.ltx файлов отменяет этот дополнительный шаг перевода.

Команда Save автоматически использует предыдущий формат. Для перехода на другой формат нужно использовать команду Save As.

Close____________ F7

Команда Close закрывает активное окно. Если при этом изменения не сохранены, выдается предупреждение.

И

UNDO Text

(Текстовый)

LINDO

Packed (Упакован­ ный)

MPS (Стандарт­ ный)

*.ltx

Mpk

*.mps

Таблица 2

Окно сохраняется в текстовом формате точно в том виде, как оно выглядит на экране. Доступный для окон моделей, отчетов и команд. Комментарии и специальное форматирование не теряются.

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

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

Print_____________ F8

Команда Print посылает содержимое активного окна на принтер. Можно напечатать любой тип окна - окно отчетов, команд или модели.

Printer Setup______F9

Команда Printer Setup открывает стандартное диалоговое окно настройки принтера.

Log Output_______ F10

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

При выборе команды Log Output открывается стандартное Windows диалоговое окно выбора файлов, подобное окну команды Save As. Отличие лишь в дополнительных средствах записи, расположенных в нижнем правом углу окна. Это два флажка: «Echo to screen» (отображение на экран) и «Append output» (присоединенный выход). По умолчанию оба флажка не установлены. При этом выход

12

будет направлен только в файл протокола и не направлен в окно отчетов, и запись будет производиться поверх существующего файла протокола, если выбрано его имя (LINDO выдаст соответствующее предупреждение). При установке флажка «Echo to screen» выход будет направлен и в файл протокола, и в окно отчетов, и процесс вывода может заметно замедлиться при большом объеме отчета.

Если установлен флажок «Append Output», то LINDO будет добавлять выход в конец любого существующего файла протокола.

Команда Log Output работает как «флаг». При первом выборе команды открывается файл для вывода протокола н в меню File появляется контрольная метка. При повторном выборе команды Log Output файл протокола закроется и контрольная метка удалится из меню. Для получения файла протокола с результатами решения сначала нужно решить модель, используя команду Solve в меню Solve. Затем выбрать команду Log Output нз меню File, чтобы открыть файл для отчета о решении. Файл протокола откроется, но пока он не содержит никаких данных. Только после выбора команды Solution нз мешо Reports решение будет послано в файл протокола (замечание: решение не появится на экране, если не установлен флажок «Echo to screen» в диалоговом окне Log Output). Наконец, следует закрыть файл протокола, еще раз выбрав команду Log Output, и копня отчета о решении на диске готова.

Сохранение очень длинных отчетов. После запуска L1NDO все выходные сообщения и отчеты направляются в окно отчетов. Каждая новая строка выхода добавляется в конец предыдущей части выхода в окне отчетов. Окно отчетов может содержать только около 64000 символов данных. Когда вывод приблизится к этому пределу, LINDO удалит верхние строки окна отчетов, чтобы освободить место для нового выхода внизу. В этом случае невозможно содержать полные копии длинных отчетов в окне отчетов. Если нужно сохранить копию полного сеанса, превышающую 64000 символов, следует просто открыть файл протокола перед началом работы и установить флаг «Echo to screen» в диалоговом окне Log Output. Весь выход, появляющийся в окне отчетов, также будет направляться в выбранный файл протокола. В нем будет содержаться копия полного сеанса работы UNDO.

Take Commands F ll

LINDO для Windows поддерживает язык команд для построения файлов сценария или файлов макросов. (Эти команды не обсуждаются здесь подробно, так как они ориептпровапы па ввод в командную строку. Краткий обзор дан в приложении 2.) Если построить файл сценария, то его можно запустить комапдой Take Commands.

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

13

ВАТ ! Транспортная модель с 3 поставщиками и 4 потребителями

!

! X <i><j> - количество перевозок от поставщика <i> ! к потребителю <j>

6X 11+2X 12 + 6X13 + 7X14

+4X21 + 9 X22 + 5X23 + 3X24

+8 ХЗ1 + 8 Х32 + ХЗЗ+5 Х34 SUBJECT ТО

!Ограничения по потребностям:

Cl)

X II +Х21 +Х31 >= 12

С2) Х12 + Х22 + Х32 >=17

СЗ)

Х13 + Х23 + ХЗЗ >= 22

С4)

Х14 I Х24 + Х34>= 12

! Ограничения запасов:

Hi)

X II + Х12 + Х13 + Х14 <= 30

Н2)

Х21 + Х22 + Х23 + Х24<= 25

НЗ)

Х31 + Х32 +ХЗЗ + Х34 <= 30

END

! Репшть модель TERSE

GO

'.Отклонить решение DIVERT SOLU.12 SOLU

RVRT

!Установить RHS (правую часть) условия С1 в 14, снова репшть модель и сохранить I отчет-

ALT C l RIJS 14:

TERS GO

DIVERT SOLU. 14 SOLU

RVRT

!Установить RHS условия Cl в 16, снова решить модель и сохранить отчет

ALT Cl RHS 16

TERS

GO

DIVERT SOLU. 16 SOLU

RVRT

BAT LEAVE

Чтобы LINDO выполнил команды, содержащиеся в этом файле, достаточно запустить команду Take Commands и ввести на запрос имя файла сценария.

14

Basis Save Shift+ F2

На языке исследования операций решение модели линейного программирования соотносится с базисом (базисное решение). Таким образом, команда Save Basis - это просто команда для сохранения решения активной модели. Она позволяет сократить время решения, когда решение повторяется после незначительной модификации модели, так как итерации начнутся со старого (сохраненного) оптимального решения. Это особенно заметно на больших непрерывных моделях. На моделях целочисленного и квадратичного программирования эффект незначителен.

Сохраненное решение предназначается только для загрузки обратно в UNDO в качестве начального и не может быть использовано для отчетов.

При запуске команды Basis Save открывается стандартное диалоговое окно выбора файла для записи. Список форматов сохранения включает следующее:

• Punch

MPS «Punch» формат

• FBS

формат «File Basis Save» (Файловое сохранение базиса)

• SDBC

формат «Save DataBase Column» ( Сохранение столбцов базы

данных)

 

 

 

Лучшие результаты дает формат Punch или

FBS. SDBC формат не сохраняет

все требуемые

детали

истинного базиса, он

включен только для поддержки

совместимости с ранними версиями LINDO.

 

Basis Read

.

F12

 

КомандаBasisRead используется для восстановления решения модели, сохраненного по команде Basis Save.

Чтобы восстановить решение, используя команду Basis Read, нужно окно модели, с которой будет связано решение, сделать активным. Тогда крманда Basis Read будет доступна в мешо File. Выбор команды Basis Read приводит к открытию стандартного диалогового окна выбора файла базиса для чтения. При этом из списка трех вышеописанных форматов выбирается тот, что использовался при сохранении базиса. Если файл выбран правильно, UNDO инсталлирует решение в модель активного окна. Теперь можно запустить решение модели.

Замечание. Пока модель открыта в UNDO, базис модели находится в памяти. Если по какой-либо причине, нужно уничтожить базис в памяти, заставить L1NDO начать сначала, можно вызвать команду Compile в мешо Solve. Она сбрасывает всю внутреннюю информацию .о базисе.

Title________ Shift+ F3

Если модель имеет заголовок, то команда Title позволяет присоединить его к отчету о решении.

Date_________Shift+ F4

Команда Date посыпает текущую дату и время в окно отчетов.

Elapsed Time_____ Shift + F5

Команда Elapsed Time посылает в окно отчетов время, прошедшее с запуска текущего сеанса.

15

Exit

Shift+ F6

Команда Exit вызовет выход из UNDO и возврат в операционную систему. При наличии весохраяенных изменений будет выдан соответствующий запрос.

Меню EDIT

Это меню содержит команды, которые поддерживают полноэкранные опции редактирования в LINDO. Здесь полезно напомнить, что в меню File существуют две команды, которые открывают модель в LINDO. Это команды Open и View. При использовании команды Open модель размещается в окне редактирования, а команды View - в окне просмотра. Отличить окна можно по виду поля заголовка окна. Если это окно просмотра, после имени файла в полосе заголовка появится “(v)”.

Эти окна имеют разные возможности. Окно редактирования может управлять файлами, содержащими до 64000 символов, тогда как в окне просмотра размер файла ограничен только доступной памятью. Окно редактирования лучше, чем окно просмотра тем, что здесь доступно больше возможностей редактирования. Табл. 3 содержит список средств редактирования, поддерживаемых каждым из окон.

Таблица 3

Емкость

Ограничена только

64К

доступной памятью

Undo (Отмена)

 

Cut (Вырезать)

 

Сору (Копировать)

 

Paste (Вставить)

 

Clear (Очистить)

 

Find/Replace

щ

 

(Найтя/Заменить)

 

 

 

Go to Uric

Ш

(Идти на строку)

 

 

Paste Symbol

 

 

(Вставить символ)

 

Select All (Выделить все)

 

Clear АН (Очистить все)

 

Choose New Font

(Сменить шрифт)

 

 

Для расширения возможностей редактирования в случае большой модели можно использовать внешний текстовый редактор. При этом модель должна быть сохранена во внешнем редакторе с опцией «только текст». Тогда модель может быть прочитана в UNDO командой View.

16

Undo___________Ctrl +Z

Команда UNDO используется для отмены последнего действия в окне редактирования.

Cut____________ Ctrl +X

Команда Cut используется для удаления выделенного текста из окна редактирования в буфер обмена Windows. Этот текст может быть вставлен в другое приложение или другое окно в UNDO.

С о ру ___________Ctrl + С

Команда Сору копирует выделенный текст из окна редактирования в буфер обмена. Этот текст может бьггь вставлен в другое приложение или другое окно редактирования в UNDO.

Paste___________ Ctrl +V

Команда Paste вставляет текст из буфера обмена в окно редактирования по текущему положению курсора. Если текст в окне уже выделен, команда Paste удалит выделенный текст и заменит его текстом из буфера обмена. Вставлять в UNDO можно только текст. Графика не разрешена.

Clear____________Del

Команда. Clear

используется для

удаления выделенного текста из окна

редактирования. При

этом текст теряется,

команда Undo не доступна (как и при

удалении клавишей Del).

Find/Replace Ctrl + F

Команда Find/Replace может быть использована или в окне редактирования, или в окне просмотра, чтобы найга некоторую строку текста и по желанию заменить ее альтернативной строкой. Диалоговое окно имеет два поля ввода (искомой и заменяющей строки) и кнопки для управления поиском и заменой.

Для поиска с начала файла можно использовать команду Go to Line, чтобы переместить курсор в начало файла перед вызовом команды Find/Replace.

По умолчанию UNDO выполняет команду Find/Replace, игнорируя регистр текста. Для учета регистра нужно установить флажок Match Case (расположен в нижнем левом yniy диалогового окна);

Options______ Alt+O

Команда Options применяется для модификации параметров-системы, принятых по умолчанию. Когда вызывается команда Options, появляется диалоговое окно, содержащее эта параметры (рис. 1).

Опции UNDO остаются в действии в течение всего текущего сеанса. Если нужно сохранить установки после их модификации, тб следует нажать кнопку Save. Для возврата к значениям, установленным по умолчанию•1достаточно нажать кнопку Default. Опции по умолчанию описаны ниже.

Все опции разделены на две группы:

LOptimizer Options (Опции оптимизатора) это. параметры, которые имеют отношение к функционированию механизма решающего устройства:

17

а) Integer Programmig (IP) (Целочисленное программирование (ЦП)) - опции, которые влияют на процесс решения IP моделей.

б) General (Общие) - общие опции решающего устройства, которые имеют • отношение ко всем классам моделей.

2. Output Optins (Опции выхода) - опции, которые действуют на количество и стиль выходных данных L1NDO.

Рис. 1

Опции оптимизатора

Эта группа состоит из двух подгрупп: Integer Programming (Опции целочисленного программирования) и General (Общие). Группа опций целочисленного программирования (IP) влияет на то, как решающее устройство UNDO управляет моделями целочисленного программирования при реализации метода ветвей и границ. Общая группа опций оптимизатора имеет отношение к способу, которым решатель управляет всеми классами моделей: линейными, целочисленными, квадратичными.

Опции оптимизатора целочисленного программирования. Задачи целочисленного программирования могут быть иногда чрезвычайно сложными для решения и в таких случаях IP опции будут полезны. Они включают:

Preprocessing (Предварительная обработка),

Preferred branching direction (Предпочтительное направление ветвления),

IP optimality tolerance (Допустимое отклонение оптимума IP),

IP objective hurdle (Барьер цели IP),

IP variable fixing tolerance (Допустимое отклонение фиксации IP переменных).

18

Обсуждение этих параметров предполагает определенные знания об алгоритме решения IP задач методом ветвей и границ,

Preprocess

Предварительная обработка - это необязательная фаза решателя целочисленного программирования в UNDO. В течение этой фазы решающее устройство дополняет модель IP отсечениями. IP отсечения - это ограничения, которые отсекают части допустимой области непрерывной модели (модели без требования целочисленности), которые не содержатся в допустимой области целочисленной модели. На большинстве IP моделей этим достигается 2 цели. Во-первых, решения непрерывных задач будут содержать больше целых переменных и, следовательно, по меньшему числу переменных потребуется ветвление. Во-вторых, границы ■для оценки решения в промежуточных вершинах будут сужаться, обеспечивая более быстрый обрыв ветвей: Эти дополнения могут существенно ускорить процессрешения во многих моделях IP.

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

По умолчанию UNDO выполняет шаг предварительной обработки.

Preferred Branch

Ветвление является одной из основных операций при решении IP моделей. Найдя дробную переменную, решающее устройство выполняет на ней ветвление: фиксирует ее значение на одном из ближайших целых значений и продолжает вычисления. Так как имеется два целых значения, UNDO может разветвить либо вверх ( по большему целому), либо вниз. В ряде случаев эти варианты могут давать разную производительность. Опция Preferred Branch позволяет управлять этим фактором.

По умолчанию UNDO выбирает направление ветвления. При этом UNDO принимает решение разветвлять вниз или вверх, анализируя предпочтительность направления для данной переменной.

IP Optimality Tolerance

Команда IP Optimality Tolerance устанавливает долю f, которая показывает решающему устройству, что он должен искать только те решения, значения целевой функции в которых на 100 f % лучше, чем в самом лучшем решении до этого.

Конечный результат использования IP Optimality Tolerance может быть разный. С одной стороны, время решения будет значительно уменьшаться. С другой - при установлении этого допуска UNDO может не найти оптимальное решение, а отчет не будет содержать причину неразрешимости. Однако, если решение найдено, то оно отличается от оптимального не более чем на 1001%. В больших целочисленных моделях решения с допуском не более. 2% могут быть получены за несколько минут, а для получения истинного оптимального решения потребуется несколько дней.

По умолчанию в UNDO не используется IP Optimality Tolerance (значение None). В качестве иллюстрации потенциальной мощности IP Optimality Tolerance приведем результаты эксперимента с небольшой IP моделью, содержащей 34 переменные типа^общие целые» и 20 условий.

Решение с установкой по умолчанию потребовало 10064 итерации, 1715 ветвлений и 19 секунд для достижения оптимального значения критерия 8929390.

Решение этой же модели с установкой допуска 0.01 заняло только 74 итерации, 7

19

ветвлений и 2 секунды! Полученное значение критерия 8929170 не более чем на 0,002% хуже оптимального.

IP Objective Hurdle

IP Objective Hurdle (барьер и л и начальный рекорд) определяет значение, хуже которого критерий пе может быть в оптимальном решении. Если значение задано, LINDO первоначально будет искать только те целочисленные решения, в которых значение критерия лучше, чем определенное этим барьером. Поэтому хороший барьер может существенно уменьшить время решения, особенно на большой IP модели. Тем не менее, если барьер окажется завышенным, LINDО возвратит сообщение о недопустимости' (неразрешимости модели).

По умолчанию барьер установлен в None.

IP Variable Fixing Tolerance

LINDO начинает решать IP модель с решения исходной модели со снятым требованием целочисленности. В полученном непрерывном решении могут быть целочисленные переменные, имеющие целые значения с отрицательными относительными оценками, значительно отличающимися от нуля (или сильно уменьшенными стоимостями). Поэтому можно ожидать, что изменение значений таких переменных вызовет ухудшение решения и, значит, с большой вероятностью эти значения могут оказаться оптимальными. Начальная фиксация этих переменных ограничивает'!Дерево и дает надежду раньше получить хорошие критериальные границы, которые применяются затем на большей части полного дерева, возникающегокак только освобождаются фиксированные целочисленные переменные. Для использования этой возможности следует ввести числовое значение в поле IP Variable Fixing Tolerance. Тогда LINDO будет сначала фиксировать все целые переменные с уменьшенными стоимостями, превышающими это значение.

По умолчанию принято значение None.

Общие опции оптимизатора* Следующие опции влияют на операции оптимизации всех классов моделей:

Nonzero Limit (Предел ненулевых элементов),

Iteration Limit (Предел итераций),

Initial Constraint Tolerance (Начальный допуск для ограничений),

Final Constraint Tolerance (Конечный допуск для ограничений),

Entering Variable Tolerance (Допуск вводимых переменных),

Pivot Size Tolerance (Допуск на величину направляющего элемента).

Nonzero Limit

LINDO хранит только ненулевые значения 'коэффициентов , модели.. Когда, LINDO загружается, устанавливается фиксированный объем памяти как пространство, для ненулевых коэффициентов. Определить этот предел можно, проверив поле Nonzero Limit. Если модель имеет особенно большое число ненулевых элементов, можно увеличить Nonzero Limit, чтобы позволить LINDO оптимизировать модель. С другой стороны, если понадобится сохранить память, можно уменьшить Nonzero Limit Каждый ненулевой элемент занимает 8 байт памяти. Чтобы изменить предел ненулевых элементов, нужно ввести новое значение в поле Nonzero Limit и нажать кнопку «Со­ хранить». Будет выдано сообщение: «Вы изменили предел ненулевых элементов. Вам необходимо перезапустить LINDO для включения изменений». LINDO не может

20