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

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

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

SMALLEST 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