книги / Оптимизация в LINDO
..pdfSMALLEST AND LARGEST ELEMENTS IN ABSOLUTE VALUE=1.0 5.0: NO.<: 84 N0.==: 0 N O > : 0, OBJ=MAX, GUBS <*4
SINGLE COLS= 1 _________
To обстоятельство, что есть столбец с одним ненулевым значением (SINGLE COLS* I), выглядит подозрительно. Допустим, известно, что каждая переменная, имя которой начинается с ‘R \ а третьим символом является ‘С’, должна входить в модель 21 раз (т.е. число ненулевых элементов должно быть 21). Чтобы проверить это, снова запустим команду Reports|Peruse и заполним появившееся диалоговое окно (рис; 27): '*;
Здесь условие п = *г%с%* .and. z # 21 требует от LINDO показать все переменные, которые имеют имя с первым символом ’г’ и третьим символом ‘с’ (д=г%с%) и число, ненулевых значений, не равное 21. В результате можем получить такой отчет:
т Ш |
т ш * т |
R1C6 |
29 |
R5G1 |
1 |
R5C6 |
13 |
RDC4 |
22 |
RDC6 |
20 |
Из отчета видно, что большая часть переменных содержит ошибки. Для просмотра каждого из вышеприведенных столбцов можно воспользоваться командой ReportsjShow Column.
61
Команда DEBUG
Предположим, модель линейной задачи содержит одну ошибку-опечатку, которая делает ее неразрешимой. Ограничение, содержащее ошибку, будет иметь ненулевую двойственную переменную в отчете о решении. К сожалению, помимо него может быть большое число других ограничений, которые также имеют не равные нулю двойственные цены. Ненулевые двойственные цены означают, что ослабление соответствующих ограничений может уменьшить сумму неразрешимостей. Например, в нижеприведенной модели коэффициент в 4-й строке должен быть не 0.55, а 5.5.
MAX 3X + 7Y
ST
Л). -:.'X+2Y-<3
3)2Х + Y <2
4)0.55Х + Y >4
END
При попытке решить эту модель выдается следующий отчет о решении:
NO FEASIBLE SOLUTION AT STEP 1 (нет допустимого решения на шаге 1) SUM OF INFEASIBUniES (сумма недопустимостей) = 2,483333
VIOLATED ROWS HAVE NEGATIVE SLACK,
OR (EQUALITY ROWS) NONZERO SLACKS.
ROWS CONTRIBUTING TO INFEASIBILITY HAVE NONZERO DUAL PRICE.
(Нарушенные строки имеют отрицательные дополнительные переменные или (в
строках-равенствах) |
ненулевые |
дополнительные |
переменные. |
Строки, |
||
обусловливающие неразрешимости, имеют ненулевые двойственные девы.) |
|
|||||
|
OBJECTIVE FUNCTION VALUE |
|
|
|
||
1) |
10,33333 |
|
VALUE |
|
REDUCED COST |
|
|
VARIABLE |
|
|
|
||
|
Переменные |
|
Значения |
Уменьшенная стоимость |
||
|
X |
|
0.333333 |
|
0.000000 |
|
|
Y |
|
1.333333 |
|
0.000000 |
|
|
ROW |
SLACK OR SURPLUS |
DUAL PRICES |
|
||
|
Ряд |
Резерв или остаток |
Двойственные цены |
|
||
|
2) |
|
0.000000 |
|
0.483333 |
|
|
3) |
|
0.000000 |
|
0.033333 |
|
|
____ 1)_______ |
-2,4833333 |
|
-1,000000 |
|
Все ограничения имеют ненулевые двойственные цены, а ошибка только в
одном.
Команда Solve|Debug будет пытаться определить одно или больше критических ограничений. Ограничение является критическим, если удаления только этого ограничения из всей модели достаточно, чтобы сделать модель разрешимой. Это ограничение идентифицируется командой Debug как д о с т а т о ч н о е М Н О Ж Е С Т В О (SUFFICIENT SET). Не каждая неразрешимая модель имеет критические ограничения. В любом случае команда Debug также определяет множество ограничений таких, как
62
границы столбцов, которые составляют Н Е О Б Х О Д И М О Е М Н О Ж Е С Т В О (NECESSARY SET). Такое множество неразрешимо, однако, если какой-либо элемент этого, множества удалить, оно становится разрешимым. Таким образом, необходимо сделать, по крайней мере, одну коррекцию в NECESSARY SET(ROWS) для разрешимости модели.
Для рассматриваемой модели команда Debug выдает следующий отнет:
SUFFICIENT SET (ROWS), CORRECT ONE OF: (достаточное множество, правильно одно из:)
4) 0.55 X +Y >= 4
NECESSARY SET (ROWS), CORRECT ONE OF: (необходимое множество, правильно одно из:) 2) X + 2 Y <= 3______________________ _
Заметим, что строка 2, которая оказалась правильной, не появляется в списке достаточного множества (SUFFICIENT SET) возможных ошибочных строк, в то время как ошибочная строка 4 вошла в него. Итак, команда Debug может быть полезна в уменьшении числа ограничений, в которых нужно искать ошибки.
Команда Debug может быть использована подобным образом в неограниченных моделях для определения множества потенциально неправильных переменных, которые следует ограничить.
6. Предельныеразмеры и числа
Размер модели, которая может быть решена в UNDO, зависит в основном от быстродействия процессора используемого компьютера, объема его оперативной памяти и от того, как сформулирована модель. На стандартном персональном компьютере с 8 мегабайтами ОЗУ возможно решение с 8000 строк и 16000 столбцов. На машинах с большими объемами памяти версии UNDO позволяют решать задачи с 64000 строк и 100000 столбцов.
Во избежание числовых сложностей следует правильно масштабировать элементы модели. Не должно быть ненулевых коэффициентов с абсолютным значением больше чем 100000 или меньше чем 0.0001. Если LINDO определит, что матрица неудачно масштабирована, то выведет соответствующее сообщение. В таких ситуациях UNDO будет делать проверку значения критических вычислений (т.е. выяснять, в каких случаях число, скажем, 0.00000325 действительно нуль и в каких оно действительно верный ненулевой коэффициент).
В очень больших задачах со многими несвязанными ограничениями возможно небольшое повышение эффективности решения, в частности, сокращение времени, при преобразовании ограничений «больше или равно» в ограничения «меньше или равно».
LINDО принимает введенные данные точно до 6 десятичных цифр. В основном, ответы из UNDO будут иметь почти такую же точность, что и вводимые данные. Очевидно, что число, содержащее меньше цифр, воспринимается как точное значение коэффициента. Это следует иметь в виду при вводе значений, которые нельзя представить точно. В противном случае можно получить неправильные результаты. Например, следующая модель представлена неудачно:
MAX Z
SUBJECT ТО
63
2)- 0.6666 Z + X = О
3)- 0.3333 Z + Y = 0
4)-Z + X +Y = 0
5)Z < - 1
END
Вероятно, составитель модели исходил из следующих соотношений:
2 ) X=(2/3)Z
3)Y = (1/3)Z
4)X+Y=Z
5)Z<r=l
Вэтом случае решение должно быть Z “ 1, X ~ 2/3, Y = 1/3. UNDO, однако, воспринимает коэффициенты, которые,были введены, буквально (как точные значения)
ипредлагает следующее решение в качестве оптимального:
LP OPTIMUM FOUND AT STEP |
1 |
|
|
OBJECTIVE FUNCTION VALUE |
|
|
|
1) О.ООООООООБ+00 |
|
|
|
VARIABLE |
VALUE |
|
REDUCED COST |
Z |
0.000000 |
|
0.000000 |
X |
0.000000 |
|
0.000000 |
Y |
0.000000 |
|
0.000000 |
ROW |
SLACK OR SURPLUS |
DUAL PRICES |
|
2) |
0.000000 |
|
9998.340820 |
3) |
0.000000 |
|
9998.340820 |
4) |
0.000000 |
|
-9998.340820 |
5) |
1.000000 |
|
0.000000 |
Естественно, что для полученных входных данных ограничение (4) согласуется с ограничениями (2) и (3) только при X = Y = Z = 0. Действительно, если сложить ограничения (2) и (3), то получим -0.99992 + X + Y = 0. Это согласуется с (4) до пяти десятичных знаков только тогда, когда X = Y = Z = 0.
Если же ввести коэффициент модели с точностью до б десятичных знаков в дробной части, а именно:
MAX Z
SUBJECT ТО
2)- 0.666666 Z + X = 0
3)- 0.333333 Z + Y = 0
4)-Z + X +Y = 0
5)Z<= 1
END
то UNDO получит решение:
64
LP OPTIMUM FO U N D AT STEP |
1 |
|
||
OBJECTIVE FUNCTION:VALUE |
|
|
||
1) |
1.000000 |
|
|
|
|
VARIABLE |
VALUE |
|
REDUCED COST |
|
Z |
1.000000 |
|
0.000000 |
|
X |
0.666666 |
|
0.000000 |
|
Y |
0.333333 |
|
0.000000 |
|
ROW |
SLACK OR SURPLUS |
DUAL PRICES |
|
|
2) |
0.000000 |
|
0.000000 |
|
3) |
0.000000 |
|
0.000000 |
|
4) |
0.000001 |
|
0.000000 |
Л _________ |
0.000000 |
|
1.000000 |
Такой результат обусловлен тем, нго UNDO рассматривает значения 0.999999 и 1 как неразличимые.
Из этого примера следует, что при грамотной записи модели допустимое множество не должно так существенно изменяться при малых изменениях в коэффициенте. Такое влияние обусловлено наличием в модели линейно-зависимых ограничений. В рассмотренном примере такими ограничениями являются (2), (3) и (4). Когда Z =1, ограничение (4) излишне или несовместно с (2) и (3), зависящих от очень маленьких изменений в коэффициенте. Если же удалить ограничение (4), то обнаружится, что модель стала устойчивой' (робастной), и решение только слегка изменится при малых изменениях в .коэффициентах при Z в (2) и (3). Большая двойственная цена 9998.34 в первом решении как раз и говорит о том, что модель содержит линейно-зависимые, но не вполне совместные, ограничения. Большое значение двойственной переменной показывает, что малые изменения параметра могут сильно сказываться на результатах.
Рекомендации
Известно, что компьютеры используют бинарную систему счисления, в которой нельзя представлять точно большинство дробей. Например, большинство компьютеров не могут представить вполне простую дробь типа 0.1 с полной точностью. Таким образом, если^ вводится модель, имеющая дроби, то модель, сохраненная внутри компьютера, может слегка отличаться от введенной. В результате решение может быть слегка отличным от того, которое ожидается (вместо 1.0 появится в отчете 0.99999 и т.п.). Чтобы уменьшить подобные явления, следует избегать, по возможности, дробей в вводимых данных, особенно типа 0.66666.
В связи с этим ограничение вида
-.66666 Z + X = 0
лучше переписать как
-2Z + 3 Х = 0,
а ограничение
Х-0.1 у < 0
можно представить в виде
10 X - Y < 0.
65
Приложение 1
Краткий обзор команд LINDO для Windows
1. Меню FILE
New (Новое)
Open (Открыть)
View (Просмотреть)
Save (Сохранить)
Save As (Сохранить как)
Close (Закрыть)
Print (Печать)
Printer Setup (Установка)
Log Output (Протокол)
Take Commands
(Выполнить команды)
Basis Read (Читать базис)
Basis Save (Сохранить
базис)
Title (Заголовок)
Date (Дата)
Elapsed Time (Затраченное
время)
Exit (Выход)
Создает новое пустое окно модели Загружает модель из файла на диске
Открывает модель, доступную только для просмотра из файла на диске Сохраняет модель из активного окна на диске
Сохраняет модель из активного окна на диске под новым именем файла Закрывает активное окно
Печатает содержимое активного окна Используется для настройки принтера Открывает или закрывает файл протокола, используемый для записи результатов сеанса
Запускает файл сценария UNDO (*.itx)
Загружает решение с диска в активную модель Сохраняет текущее решение активной модели на диске Показывает заглавие активной модели Показывает дату
Показывает время, которое прошло с начала сеанса
Выход из UNDO
2. Меню EDIT
Undo (Отмена)
Cut (Вырезать)
Сору (Копировать)
Paste (Вставить)
Clear (Очистить) Find/Replace (Найти/Заменить)
Options (Опции)
Go to Line (Идти на строку)
Отменяет последнюю операцию редактирования Удаляет выделенный текст из окна и помещает его в буфер обмена Копирует выделенный текст в буфер обмена
Вставляет содержимое буфера обмена в активное окно Удаляет выделенный текст из окна
Находит заданную строку текста в активном окне и по выбору разрешает замещение Используется, чтобы сконфигурировать опции LINDO
Переходит на заданный номер строки в активном окне
бб
Paste Symbol
(Вставить символ)
Select All (Выделить все) Clear All (Очистить все) Choose New Font • (Выбрать шрифт)
Средство редактирования, которое разрешает вставить имена переменных и зарезервировать символы в активном окне Выделяет весь текст в активном окне Удаляет весь текст в активном окне
Устанавливает шрифт в активном окне
Solve (Решить)
Compile Model (Компилировать модель)
Debug (Отладка)
Pivot (Симплекс-
преобразование)
Preemptive Goal
(Предпочтительная цель)
3. Меню SOLVE
Решает модель в активном окне
Компилирует модель в активном окне
Отлаживает модель в активном окне, если она неразрешимая или неограниченная Исполняет симплекс-итерацию на выбранном элементе модели
Используется лексикографическая оптимизация (форма целевого программирования) в активном окне
4. Меню REPORTS
Solution (Решение)
Range (Диапазон)
Parametrics
(Параметрический анализ)
Statistics (Статистика)
Peruse (Тщательный
просмотр)
Picture (Изображение)
Basis Picture (Базисная картина)
Tableau (Симплекстаблица) Formulation
.(Формулировка)
Show Column (Показать столбец)
Создает отчет о решении для модели активного окна Создает отчет анализа диапазона (чувстви
тельности) для модели активного окна Выполняет параметрический .анализ правой части условия Показывает статистику модели в активном окне
Выполняет генерирование текстовых отчетов и/или графиков выбранных элементов активной модели Создает текстовое и/или графическое изобра
жение ненулевой структуры активной модели Создает текстовое изображение базисной матрицы для активной модели Показывает симплекс-таблицу для активной модели
Показывает активную модель
Показывает столбец/переменную активной модели
67
Positive Definite (Положи
Определяет, является ли матрица положительно
тельная определенность)
определенной (в модели квадратичного
5. Меню WINDOW
Open Command window (Открыть окно |
Открывает |
окно, |
которое |
принимает |
|||
команд) |
традиционные команды UNDO |
||||||
Open status window (Открыть окно |
Открывает |
окно |
статуса |
решения, |
|||
статуса) |
которое может быть |
использовано, |
|||||
чтобы проверить ход решения модели |
|||||||
|
|||||||
|
Отправляет |
активное |
окно |
назад, |
|||
Send tp^ack (Послать назад) |
выдвигая следующие за ним окна |
||||||
|
вперед |
|
|
|
|
|
|
Cascade (Каскад) |
Располагает |
все |
открытые |
окна |
|||
внахлест в каскадном стиле |
|
|
|||||
|
|
|
|||||
Tile (Черепица) |
Располагает |
все |
открытые |
окна в |
|||
форме «черепицы» |
|
|
|
|
|||
Close All (Закрыть все) |
|
|
|
|
|||
Закрывает все открытые окна |
|
||||||
Arrange Icons (Свернуть в иконку) |
Бели любое окно свернуть, иконка для |
||||||
минимизированных |
окон |
будет |
|||||
|
располагаться внизу экрана |
|
|
6. Меню Help
Contents (Содержание) |
Показывает таблицу содержания |
|
системы помощи UNDO |
||
Search for Help On (Поиск помощи |
||
Выполняет поиск в системе помощи |
||
на...) |
темы, указанной пользователем |
|
How to use Help (Как использовать |
Дает некоторую информацию по |
|
Help) |
использованию системы помощи |
|
About UNDO (0 UNDO) |
Показывает специфическую информа |
|
цию о версии UNDO, включая номер |
||
|
версии и максимальный размер задачи |
68
Приложение 2
Краткое описание команд для командной строки
Все команды. .LINDО,., применимые в операционных системах с текстов интерфейсом (MS-DOS и др.), сгруппированы в 11 категорий.- . Каждая: катего| представлена соответствующей таблицей.
|
1. Информация |
Команда й |
|
CAT |
Выдает список категорий команд |
СОМ |
Выдает список команд категории |
HELP |
Дает справку по отдельной команде |
LOCAL |
Дает информацию по данной инсталляции LINDO |
TIME |
Возвращает полное время работы в текущей сессии |
|
2. Ввод |
-Щ Сойавда^^ |
|
FBR |
Восстанавливает базис, сохраненный командой FBS |
FINS |
Восстанавливает базис, сохраненный командой FPUN |
LEAVE |
Останавливает выполнение командного скрипта |
MAX/MIN |
Начало ввода модели |
RDBC |
Восстанавливает базис, сохраненный командой SDBC |
RETR |
Восстанавливает задачу, сохраненную командой SAVE |
RMPS |
Восстанавливает файл в формате MPS |
TAKE |
Выполняет командный скрипт из файла |
|
3. Вывод (на дисплей) |
BPICTURE
CPRI
DMPS
LOOK
NONZ
PIC
RANGE
RPRI
SHOCOLUMN SOLUTION TABLEAU '
Показывает картину базиса, упорядочив ряды соответственно прошедшей инверсии (итерации)
Дает выбранную информацию о подмножестве столбцов,
которые указал пользователь" |
- |
......... .< .. |
Открывает MPS формат отчета о решении |
|
|
Показывает всю или часть формулировки модели |
|
|
Показывает ненулевые значения реШейюг |
|
.. . |
ПоказываетлбгичеекуЮ'картину задачи |
|
л 5;1: |
Показывает отчет анализа Range '*
Дает выбранную информацию 6 подмножестве строк, которые указал пользователь Показывает столбец (переменную) модели
Показывает стандартный отчет о решении Показывает текущую симплекс-таблицу -
69
|
|
4. |
Вывод в файл |
|
|
DIVERT |
if TMTP^HICД Н И |
|
|
||
Сбрасывает экранный вывод в файл |
|
|
|||
FBS . |
Сохраняет текущий базис в формате UNDO |
|
|
||
FPUN |
|
Сохраняет текущий базис в формате MPS |
|
|
|
RVRT |
Восстанавливает экранный вывод на терминал |
|
|
||
SAVE |
|
Сохраняет текущую модель в сжатом файле |
|
|
|
SDBC |
|
Сохраняет решение в формате столбец/база данных |
|
||
SMPS |
|
Сохраняет текущую модель в формате MPS |
|
|
|
|
|
|
5. Решение |
|
|
GLEX |
Выполняет лексикографическую оптимизацию |
|
|
||
GO |
|
Решает модель |
|
|
|
PIVOT |
Делает симплекс-преобразование |
|
|
||
|
|
6. Редактирование модели |
|
||
ALTER |
Изменяет некоторый элемент модели |
|
|
||
АРРС |
|
Добавляет новый столбец (т.е. переменную в модель) |
|
||
DEL . |
Удаляет определенное ограничение |
|
|
||
EXT |
|
Расширяет задачу добавлением ограничения |
|
|
|
FREE; |
Объявляет переменную свободной (по знаку) |
|
|
||
SLB |
|
Вводит простую нижнюю границу для переменной |
|
||
SUB |
|
Вводит простую верхнюю границу для переменной |
|
||
7. |
Целочисленное, квадратичное и параметрическое |
||||
|
|
программирование |
|
|
|
ВЕР |
|
Устанавливает |
границу оптимального |
решения для |
IP |
|
модели |
|
|
|
|
|
|
|
|
|
|
G IN |
: |
Задает общий тип целочисленной переменной (0 ,1 ,2 ,3...) |
|
||
ШТ |
: |
Задает бинарный тип целочисленной переменной (0,1) |
|
||
IPTOL |
Устанавливает оптимальный допуск для IP модели |
|
|||
PARAMETRICS Выполняет параметрический анализ вектора ограничений |
|
||||
POSD |
|
Проверяет субматрицу ограничений |
|
|
|
QPC |
|
Указывает первое действительное |
ограничение |
в |
|
|
квадратичной модели |
|
|
||
|
|
|
|
||
TITAN |
Уплотняет IP модель |
|
|
70