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

книги / Моделирование и оптимизация в LINGO

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

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Пермский национальный исследовательский политехнический университет»

А.Л. Гольдштейн

МОДЕЛИРОВАНИЕ И ОПТИМИЗАЦИЯ В LINGO

Утверждено Редакционно-издательским советом университета

в качестве учебного пособия

Издательство Пермского национального исследовательского

политехнического университета

2018

УДК 004.42:519.85-37(075.8) Г63

Рецензенты:

д-р техн. наук, профессор Ю.Н. Хижняков (Пермский национальный исследовательский политехнический университет);

канд. техн. наук, заведующий лабораторией Г.Ф. Масич (Институт механики сплошных сред УрО РАН)

Гольдштейн, А.Л.

Г63 Моделирование и оптимизация в LINGO : учеб. пособие / А.Л. Гольдштейн. – Пермь : Изд-во Перм. нац. исслед. поли-

техн. ун-та, 2018. – 146 с.

ISBN 978-5-398-01964-3

Рассмотрены возможности пакета программ LINGO, предназначенного для решения оптимизационных задач, от линейных до нелинейно-целочислен- ных общего вида. Основными составляющими LINGO являются развитый современный язык моделирования задач оптимизации, набор мощных решателей и интерфейс с внешними системами. Представлена концепция языка, базирующаяся на описании задачи множествами подобных объектов, обладающих общими атрибутами, и функциях, оперирующих с этими множествами. Набор функций позволяет моделировать практически любые задачи математического программирования. Приведено большое число примеров, демонстрирующих применение основных функций описания модели и процесса решения, решения задач оптимизации от модели до результата, а также взаимодействия LINGO с текстовыми файлами, Excel и известными БД. Показана возможность встраивания функционала LINGO в приложения.

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

УДК 004.42:519.85-37(075.8)

ISBN 978-5-398-01964-3

© ПНИПУ, 2018

 

ОГЛАВЛЕНИЕ

 

Введение...................................................................................................

5

1.

Модели и оптимизаторы (решатели) LINGO....................................

7

2.

Особенности представления модели в LINGO...............................

14

3.

Виды множеств..................................................................................

16

4.

Раздел данных (DATA) .....................................................................

19

5.

Разделы модели INIT и CALC..........................................................

23

6.

Основные функции построения модели..........................................

25

 

6.1. Цикловые функции множеств..................................................

25

 

6.2. Функции прямых ограничений ................................................

29

 

6.3. Пример построения модели в LINGO......................................

34

 

6.4. Функции манипулирования множествами..............................

44

 

6.5. Функции представления отчетов.............................................

46

 

6.6. Функции даты и времени..........................................................

50

 

6.7. Другие функции.........................................................................

51

7.

Программирование модели и решения............................................

52

 

7.1. Пример программирования 1...................................................

62

 

7.2. Пример программирования 2...................................................

66

8.

Интерфейс с системами данных и приложениями.........................

72

 

8.1. Взаимодействие с внешними файлами....................................

72

 

8.2. Взаимодействие с электронной таблицей...............................

79

 

8.2.1. Импорт и экспорт данных между LINGO и Excel..........

79

 

8.2.2. Встраивание моделей LINGO в Excel..............................

85

 

8.2.3. Встраивание листов Excel в LINGO................................

87

 

8.2.4. OLE автоматизация в LINGO...........................................

89

 

8.3. Взаимодействие с базами данных............................................

92

 

8.3.1. Установка взаимодействия LINGO и БД ........................

94

 

8.3.2. Создание источника данных ODBC на примере БД

 

 

Access............................................................................................

95

 

8.3.3. Использование БД ORACLE............................................

99

 

8.3.4. Использование БД SQL Server.......................................

104

3

8.4. Взаимодействие с внешними приложениями.......................

106

8.4.1. Пример приложения........................................................

108

8.4.2. Передача нечисловых данных........................................

116

8.4.3. Функция пользователя....................................................

119

Заключение...........................................................................................

 

123

Список литературы..............................................................................

126

Приложение 1. Приоритет операций.................................................

128

Приложение 2. Математические функции........................................

129

Приложение 3. Команды в режиме командной строки....................

132

Приложение 4.

Параметры, доступные через команду SET

 

в режиме командной строки...............................................................

134

Приложение 5.

Функции, экспортируемые LINGO DLL.................

142

Приложение 6.

Коды ошибок, возвращаемые LINGO DLL............

145

4

ВВЕДЕНИЕ

К задачам оптимизации сводится решение широкого круга проблем, возникающих в практической деятельности человека. Как правило, задача конечномерной оптимизации ставится как задача математического программирования:

Найти максимум или минимум целевой функции (критерия оптимальности)

f (X)

при условиях

i X / / 0, i 1,m,

X P Rn ,

где символ / означает ИЛИ; Х n-мерный вектор искомых переменных; P – подмножество евклидова пространства, задаваемое прямыми ограничениями на переменные.

Выбор метода решения таких задач обусловливается свойствами функций цели и условий и подмножества P, структурой условий и размерностями n и m. Универсальных методов решения задач математического программирования не существует, однако есть много эффективных методов, ориентированных на конкретные классы задач.

Сегодня на рынке программного обеспечения представлен целый ряд различных пакетов оптимизации. В настоящем пособии рассматривается один из лучших, на наш взгляд, – программный комплекс LINGO, фактически не освещенный в отечественных публикациях.

LINGO – удобное и мощное средство моделирования и решения разнообразных классов задач оптимизации любой размерности. LINGO постоянно развивается: на момент написания пособия вышла 16-я версия пакета.

5

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

Рассматриваются особенности и преимущества языка LINGO при моделировании и решении задач математического программирования средней и большой размерности, в частности, компактность представления математической модели и легкость масштабирования моделируемых задач. Структурированное представление модели задачи позволяет отделить модель оптимизации от данных, выделить разделы предварительных вычислений (например, средних и дисперсии) и задания начальных условий. Как сможет убедиться читатель, язык моделирования дает возможность в одном описании задать вариантность решения задачи, выделить подмодели и из них формировать необходимые комбинации, каждая из которых решается как единая задача. Язык включает средства программирования, которые позволяют вводить данные как непосредственно в модель, так и из внешних источников (текстовых файлов, электронных таблиц, баз данных и пользовательских приложений), а также передавать результаты решения на экран или во внешние файлы, базы данных и т.д.

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

6

1. МОДЕЛИ И ОПТИМИЗАТОРЫ (РЕШАТЕЛИ) LINGO

Классы моделей, которые может распознавать и решать LINGO, приведены в табл. 1.

 

 

Таблица 1

 

 

 

Аббревиатура

Класс модели

Описание

LP

Линейное программи-

Все функции линейные и все пе-

рование

ременные непрерывные

 

 

Квадратичное про-

Все функции линейные или квад-

QP

ратичные и нет целочисленных

граммирование

 

переменных

 

 

 

Коническое програм-

Модель коническая (конус

CONE

второго порядка) и все перемен-

 

мирование

ные непрерывные

 

 

NLP

Нелинейное програм-

Есть функции, нелинейные

мирование

по переменным

 

 

Смешанное целочис-

Все функции линейные и есть

MILP

ленное линейное про-

целочисленные переменные

 

граммирование

(не все)

 

Смешанное целочис-

Все функции линейные или квад-

MIQP

ленное квадратичное

ратичные и есть целочисленные

 

программирование

переменные (не все)

 

Смешанное целочис-

Модель коническая (конус второ-

MICONE

ленное коническое про-

го порядка) и часть переменных

 

граммирование

целочисленные

 

Смешанное целочис-

Есть нелинейные функции и часть

MINLP

ленное нелинейное

переменных целочисленные.

 

программирование

Очень трудно решаемые модели

 

Полностью целочис-

Все функции модели линейные и

PILP

ленное линейное про-

все переменные целочисленные

 

граммирование

 

 

Полностью целочис-

Все функции линейные или квад-

PIQP

ленное квадратичное

ратичные и все переменные цело-

 

программирование

численные

 

Полностью целочис-

Модель коническая (конус второ-

PICONE

ленное коническое про-

го порядка) и все переменные

 

граммирование

целочисленные

 

Полностью целочис-

Есть нелинейные функции и все

 

переменные целочисленные.

PINLP

ленное нелинейное

Крайне трудно решаемые модели

 

программирование

 

(кроме небольших моделей)

 

 

7

Основными компонентами LINGO являются решатели (Solvers), применяемые для разных классов задач оптимизации, и встроенный современный язык моделирования с очень широкими возможностями.

Для решения задач оптимизации LINGO использует 4 встроенных решателя:

1)прямой решатель,

2)линейный решатель,

3)нелинейный решатель,

4)менеджер ветвей и границ.

Как правило, LINGO автоматически выбирает решатель (метод), соответствующий модели задачи. В то же время пользователь может в настройках решателей Solver|Options указать желаемый.

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

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

Если в генераторе модели опция линеаризации (Linearization) не отключена (degree None), LINGO автоматически линеаризует многие негладкие функции (например, max, abs), что нередко позволяет преобразовать нелинейную модель в линейную, и затем использовать линейный решатель.

Для решения линейных задач LINGO располагает тремя вариантами решателя:

8

1)решатель, использующий прямой симплекс-метод (Primal1),

2)решатель, использующий двойственный симплекс-метод

(Dual),

3)барьерный решатель, использующий метод внутренней точ-

ки (Barrier).

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

впроцедуре crossover, выполняющей конвертирование небазисного оптимального решения барьерного решателя в базисное. Он также необходим для анализа диапазонов (range analysis), при выполнении которого оптимальное решение должно быть базисным. Primal2 не требуется, если не ставится задача получения базисного оптимального решения. По умолчанию указанная процедура выполняется.

При решении линейной задачи на многоядерном процессоре можно одновременно запустить 2 решателя: на одном ядре – Primal1, а на втором – барьерный решатель.

Барьерный решатель применяется также для решения квадратичных и конических моделей.

Если LINGO обнаруживает, что модель нелинейная, запускается нелинейный решатель, который использует алгоритмы последовательного линейного программирования (SLP) и обобщенного приведенного градиента. Общий нелинейный решатель предназначен для нелинейных моделей общего вида и нелинейных целочисленных задач. В настройках решателя параметром First Order можно задать способ вычисления первых производных: аналитически или численно (методом конечных разностей). Параметр Use Second Order определяет использование вторых производных, которые могут вычисляться только аналитически.

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

При установке в настройках нелинейного решателя опции Quadratic Recognition алгебраический препроцессор проверяет, яв-

9

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

Объединение барьерного решателя с глобальным позволяет LINGO автоматически распознавать и решать конические модели.

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

В расширенном варианте в LINGO могут входить специализированные решатели:

Branch-and-Price Solver (BNP),

Branch-and-Bound Solver,

Global Solver,

Multistart Solver,

SP Solver.

Решатель BNP (ветвей и цены) предназначен для поиска решения на линейных моделях смешанного целочисленного программирования, имеющих блочную структуру. Он представляет собой гибрид процедур ветвей и границ, генерации столбца и методов релаксации лагранжиана. Используя декомпозицию, BNP выделяет из исходной задачи несколько подзадач (по числу блоков) и при многоядерном процессоре решает их независимо в режиме параллельных вычислений. В случаях, когда число связующих условий мало, число блоков велико и они примерно одинакового размера и когда число доступных процессоров или ядер не меньше 4, BNP может искать решение лучше установленного по умолчанию решателя MIP. Иногда быстро найденное BNP хорошее решение может потребовать много времени для доказательства его оптимальности.

Опция Blocks позволяет определять блоки либо через имена входящих в блок строк (Row Names), либо пользователем с помощью функции @BLOCKROW при выборе значения Specified, либо указанием возможного числа блоков, а также отказаться от применения

10

Соседние файлы в папке книги