Тренинг glpk, часть 1: Модель планирования производства

22
Основы моделирования в пакете GUSEK/GLPK v 0.3 2015-02-17 Производство компьютеров Pear (модель с отдельными ресурсами) Заходякин Г.В. [email protected]

Upload: gleb-zakhodyakin

Post on 08-Aug-2015

91 views

Category:

Data & Analytics


25 download

TRANSCRIPT

Page 1: Тренинг GLPK, часть 1: Модель планирования производства

Основы моделирования в пакете GUSEK/GLPK

v 0.3 2015-02-17

Производство компьютеров Pear (модель с отдельными ресурсами)

Заходякин Г.В. [email protected]

Page 2: Тренинг GLPK, часть 1: Модель планирования производства

План занятия• Содержательная постановка задачи• Концептуальное моделирование• Компоненты оптимизационной модели• Реализация в GLPK

2

Page 3: Тренинг GLPK, часть 1: Модель планирования производства

Содержательная постановка задачи• Компания «Pear» выпускает 3 линейки компьютеров: ПК (системные блоки), Ноутбуки, Серверы• Производственный процесс включает 2 операции: сборку и тестирование

– Все компьютеры собираются на одной линии сборки– Тестирование ПК и ноутбуков проводится на линии тестирования А. Тестирование серверов выполняется на линии B– Ресурс линии сборки составляет 400 часов в неделю (10 сборщиков с 40-часовой рабочей неделей)– Обе автоматические линии тестирования работают круглосуточно 5 дней в неделю, ресурс каждой – 120 часов в

неделю

• Маркетинговые ограничения– Компания получила заказы на 10 ПК, 10 ноутбуков и 2 сервера – эти количества обязательны к производству– Маркетологи компании считают, что реализовать более 20 серверов в неделю невозможно– Прибыль от реализации единицы каждого продукта дана в таблице

• Требуется составить план производства компьютеров на неделю, обеспечивающий наибольшую прибыль

Продукт Прибыль, руб

Мин. спрос, ед

Макс. спрос, ед

Время сборки, час

Время тестирования

ПК 10000 10 0,5 1

Ноутбук 20000 10 1 1

Сервер 100000 2 20 5 2

Сборка

Тест. А

Тест. B

Рынок

Ресурс: 400 час

Ресурс: 120 час

Ресурс: 120 час

ПК Ноутбук Сервер

3

Page 4: Тренинг GLPK, часть 1: Модель планирования производства

Математическая постановка задачи• Переменные решения:𝑥𝑥1, 𝑥𝑥2, 𝑥𝑥3- объем выпуска ПК, Ноутбуков, Серверов

• Целевая функция:𝐹𝐹 = 10𝑥𝑥1 + 20𝑥𝑥2 + 100𝑥𝑥3 → 𝑚𝑚𝑚𝑚𝑥𝑥

• Система ограничений:

12𝑥𝑥1 + 𝑥𝑥2 + 5𝑥𝑥3 ≤ 400𝑥𝑥1 + 𝑥𝑥2 ≤ 120

2𝑥𝑥3 ≤ 120𝑥𝑥1 ≥ 10𝑥𝑥2 ≥ 10

2 ≤ 𝑥𝑥3 ≤ 20

4

Page 5: Тренинг GLPK, часть 1: Модель планирования производства

Старый знакомый• На рисунке показана табличная модель для решения задачи с помощью «Поиска

решения»– Каждый столбец таблицы отвечает за один из множества продуктов (1)– Строка таблицы соответствует либо переменной решения (2),

либо свойству продукта (3)– В ячейках таблицы находятся данные для решения задачи – численные значения свойств

(параметров) продуктов (4)– Справа от таблицы находятся линейные выражения, которые вычисляют итоговые значения

прибыли и расхода ресурсов, зависящие от плана производства и свойств продуктов (5) – левые части (системы ограничений)

– Еще правее находятся значения правых частей ограничений – это также параметры, относящиеся уже не к отдельным продуктам, а к ресурсам производства (6)

❸❹

5

Page 6: Тренинг GLPK, часть 1: Модель планирования производства

Модель и решение• Если задать имена диапазонов Excel, то модель Поиска решения будет довольно

наглядной• На рисунке показано оптимальное решение задачи• Красным цветом выделены

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

6

Page 7: Тренинг GLPK, часть 1: Модель планирования производства

Концептуальная модель• Если число выпускаемых продуктов изменится, то принципиальных изменений в модели не

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

– Круги обозначают элементы множества продуктов P (для примера показаны те же элементы, что и в исходной задаче)

– Прямоугольники обозначают ресурсы производства – линии сборки и тестирования– Числа рядом с ресурсами обозначают доступные количества каждого ресурса (параметры)– Линии между продуктами и ресурсами отображают связи между ними. Количественной характеристикой каждой

связи является технологический коэффициент (yдельный расход ресурса), например на сборку ПК требуется 0,5 часа– С продуктами связаны переменные решения – объемы производства 𝑴𝑴 и параметры – удельная прибыль 𝐼𝐼

Сборка Линия А Линия B

ПК Ноутбук

Сер-вер

400 ч 120 ч 120 ч

А ПК = 0,5

P (продукты)

TАсервер = 0

𝑴𝑴ПК 𝑴𝑴Ноутбук 𝑴𝑴Сервер

𝐼𝐼ПК = 10

7

Page 8: Тренинг GLPK, часть 1: Модель планирования производства

Математическая модель: отдельные ресурсы𝐹𝐹 = �

𝑝𝑝∈𝑃𝑃

𝑀𝑀𝑝𝑝𝐼𝐼𝑝𝑝 → 𝑚𝑚𝑚𝑚𝑥𝑥

�𝑝𝑝∈𝑃𝑃

𝐴𝐴𝑝𝑝𝑀𝑀𝑝𝑝 ≤ 𝐴𝐴𝑚𝑚𝑚𝑚𝑥𝑥

�𝑝𝑝∈𝑃𝑃

𝑇𝑇𝐴𝐴𝑝𝑝𝑀𝑀𝑝𝑝 ≤ 𝑇𝑇𝐴𝐴𝑚𝑚𝑚𝑚𝑥𝑥

�𝑝𝑝∈𝑃𝑃

𝑇𝑇𝑇𝑇𝑝𝑝𝑀𝑀𝑝𝑝 ≤ 𝑇𝑇𝑇𝑇𝑚𝑚𝑚𝑚𝑥𝑥

𝐷𝐷𝑚𝑚𝐷𝐷𝑛𝑛𝑝𝑝 ≤ 𝑀𝑀𝑝𝑝 ≤ 𝐷𝐷𝑚𝑚𝑚𝑚𝑥𝑥𝑝𝑝 ∀𝑝𝑝 ∈ 𝑃𝑃𝑀𝑀𝑝𝑝 ≥ 0 ∀𝑝𝑝 ∈ 𝑃𝑃

Обозначения: • 𝑃𝑃 = ПК,Ноутбук,Сервер - множество продуктов, 𝑝𝑝 ∈ 𝑃𝑃 – индекс продукта• 𝑀𝑀𝑝𝑝 - объем производства продукта 𝑝𝑝, переменные решения• 𝐼𝐼𝑝𝑝- прибыль от продажи единицы продукта 𝑝𝑝• 𝐷𝐷𝑚𝑚𝐷𝐷𝑛𝑛𝑝𝑝,𝐷𝐷𝑚𝑚𝑚𝑚𝑥𝑥𝑝𝑝 - минимальный и максимальный спрос на продукт 𝑝𝑝• 𝐴𝐴𝑝𝑝,𝑇𝑇𝐴𝐴𝑝𝑝,𝑇𝑇𝑇𝑇𝑝𝑝- технологические коэффициенты для линии сборки, тестирования А и тестирования B

(удельный расход ресурса 𝑟𝑟 на производство продукта 𝑝𝑝)• 𝐴𝐴𝑚𝑚𝑚𝑚𝑥𝑥,𝑇𝑇𝐴𝐴𝑚𝑚𝑚𝑚𝑥𝑥,𝑇𝑇𝑇𝑇𝑚𝑚𝑚𝑚𝑥𝑥 - доступное количество ресурса 𝑟𝑟• Символ ∀ (квантор общности) читается: «для каждого». Например, ∀𝑝𝑝 обозначает, что ограничение по

cпросу должно выполняться для каждого продукта

Сборка Линия А Линия B

ПК Ноутбук

Сер-вер

400 ч 120 ч 120 ч

А ПК = 0,5

P (продукты)

TАсервер = 0

𝑴𝑴ПК 𝑴𝑴Ноутбук 𝑴𝑴Сервер

𝐼𝐼ПК = 10

8

Presenter
Presentation Notes
Замечание: здесь постановка записана в общем виде, который годится для любой производственной системы. В нашей же задаче, например, серверы не тестируются на линии А. Поэтому при решении задачи технологический коэффициент для их производства на этой линии будет равен нулю. То же касается и ограничений по спросу: если нет обязательств по поставкам на продукт p, то 𝐷𝑚𝑖 𝑛 𝑝 =0. А вот при �отсутствии ограничений на максимальный спрос придется задать 𝐷𝑚𝑎 𝑥 𝑝 =𝑀, где 𝑀 – большое число
Page 9: Тренинг GLPK, часть 1: Модель планирования производства

Компоненты оптимизационной модели• Для формализации модели на языке моделирования необходимо

определить следующие компоненты:1. Множества (set) – соответствуют типам объектов в содержательной постановке

задачи – продукты, клиенты, периоды времени, ресурсы и т.п.; содержат названия или коды этих объектов

2. Параметры (parameter) – содержат количественные характеристики, которые заранее известны; могут иметь одно значение, или характеризовать каждый элемент некоторого множества

3. Переменные (var) – содержат неизвестные заранее количественные характеристики объектов, т.е. решения, которые необходимо принять в задаче оптимизации

4. Целевая функция (minimize/maximize) – линейное выражение, соответствующее критерию эффективности в задаче

5. Ограничения (subject to) – линейное выражение, соответствующее некоторому ограничению/требованию

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

9

Page 10: Тренинг GLPK, часть 1: Модель планирования производства

Подготовка• Запустите GUSEK и сохраните пустой файл модели под именем

pearsets.mod (например, на рабочий стол)– Расширение должно быть обязательно .mod, от этого зависит подсветка

команд и доступный набор действий с файлом

• В этом примере мы будем хранить и модель, и данные в одном файле

10

Page 11: Тренинг GLPK, часть 1: Модель планирования производства

Математическая модель на MathProg: множества

• Здесь мы определили множество, которое будет использоваться в модели для обозначения продуктов – PRODUCTS

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

• Обратите внимание:• MathProg чувствителен к регистру, PRODUCTS <> Products <> products• имена компонентов задачи должны быть уникальными в пределах модели• рекомендуется множествам давать понятные названия и использовать

заглавные буквы, чтобы подчеркнуть, что это именно множество, и предотвратить возможные коллизии имен

• каждая команда в MathProg должна заканчиваться точкой с запятой• в файле нужно использовать комментарии, чтобы не забыть, для чего нужны

обозначения и команды; комментарии начинаются с # или заключаются в /* */. Файлы без комментариев рассматриваться не будут! 11

Page 12: Тренинг GLPK, часть 1: Модель планирования производства

Параметры

• Здесь мы определили три параметра, определенные на множестве продуктов. Обозначение {PRODUCTS} – это индексирующее выражение, которое означает, что для каждого продукта существует свое значение параметра

• Значения параметров на этапе формализации модели задавать не следует; они задаются в данных• При определении параметра min_demand указана проверка (>=0): значение параметра не может быть отрицательным.

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

• Также для параметра min_demand указано значение по умолчанию (default). Значение по умолчанию будет автоматически использовано, если в данных не указано другое значение. Это удобно, если значение параметра одно и то же для большинства или всех элементов множества, или если параметр почти никогда не изменяется аналитиком.

• При определении параметра max_demand использовано индексирующее выражение, в котором вводится обозначение для индекса – p. Это необходимо, т.к. в дальнейшем мы хотим сравнить максимальный и минимальный спрос на один и тот же продукт. Для этого используется обращение по индексу – demand[p]. Выражение можно прочитать так: для каждого продукта p максимальный спрос должен быть не меньше, чем минимальный спрос на этот продукт.

• 9999 – это большое число, которое заведомо превышает максимально возможный объем выпуска продуктов.• Обратите внимание:

• MathProg чувствителен к регистру, profit <> Profit <> PROFIT и p <> P• рекомендуется параметрам давать понятные названия и использовать строчные буквы, чтобы предотвратить

возможные коллизии имен; для разделения слов в имени можно использовать подчеркивание, и нельзя –пробелы

• русские символы в именах компонентов модели использовать нельзя 12

Page 13: Тренинг GLPK, часть 1: Модель планирования производства

Параметры (2)

• Параметры для технологических коэффициентов (расход ресурсов) определены аналогично. По умолчанию удобно задать, что продукт не использует ресурс (расход 0).

• Доступное время на каждом ресурсе – это характеристика ресурса, а не продуктов, поэтому эти параметры – скалярные, у каждого только одно значение

13

Page 14: Тренинг GLPK, часть 1: Модель планирования производства

Переменные решения

• Определив множества и параметры, можно приступить к формализации модели. Однако, поскольку все выражения в модели зависят от решений, необходимо сначала объявить переменные решения

• Переменная make будет содержать одно значение для каждого продукта, т.к. она определена на множестве PRODUCTS.

• Условие >= 0 при определении переменной – это граница (bound). Граница – специальный тип ограничения, который задает допустимый диапазон для отдельной переменной, без использования линейных выражений. В данном случае объем производства для каждого продукта не может быть отрицательным

14

Page 15: Тренинг GLPK, часть 1: Модель планирования производства

Целевая функция

• У целевой функции есть имя (TotalProfit) и выражение - расчетная формула, которая записывается через двоеточие после имени. У каждого компонента модели (ограничение, целевая функция) должно быть уникальное в пределах модели имя. Для обеспечения уникальности имен рекомендуется писать имена ограничений/целевых функций с заглавной буквы

• Выражение sum {p in PRODUCTS} обозначает, что сумма произведений прибыли и объема производства будет вычисляться для каждого продукта.

15

Page 16: Тренинг GLPK, часть 1: Модель планирования производства

Ограничения

• Каждое ограничение, как и в случае целевой функции, имеет имя (Assembly) и выражение, которое записывается через двоеточие после имени. Для обеспечения уникальности имен ограничений рекомендуется писать имена ограничений/целевых функций с заглавной буквы

• Выражение sum {p in PRODUCTS} обозначает, что сумма произведений прибыли и объема производства будет вычисляться для каждого продукта.

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

16

Page 17: Тренинг GLPK, часть 1: Модель планирования производства

Ограничения (2)

• Ограничения по другим ресурсам записываются аналогично.

• У ограничения по спросу есть два отличия:• команда определяет сразу семейство

ограничений – для каждого продукта; это достигается за счет использования индексирующего выражения {p in PRODUCTS} после имени ограничения; введенный здесь индекс p можно использовать в выражении для ограничения;

• ограничение двухстороннее (в MathProg такая запись поддерживается, только когда верхний и нижний пределы – константы. Если же пределы зависят от переменных, то ограничение надо разбить на два односторонних) 17

Page 18: Тренинг GLPK, часть 1: Модель планирования производства

Данные для модели

Данные для решения задачи в этом примере будут содержаться в том же файле, что и модель.

Раздел данных начинается с ключевого слова data;

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

Значения элементов множеств могут содержать русские буквы и пробелы, но в этом случае их надо брать в кавычки. Например:

set PRODUCTS := “Компьютер” “Рабочая станция”;

18

Page 19: Тренинг GLPK, часть 1: Модель планирования производства

Данные для модели

• При определении значения параметра нужно указывать название элемента множества и значение параметра для этого элемента. Например, PC 10 означает, что прибыль при реализации одного PC составляет 10 денежных единиц

• Скалярные параметры задаются просто как числа• Конец файла обозначается с помощью ключевого слова: end;

19

Page 20: Тренинг GLPK, часть 1: Модель планирования производства

Вывод результатовЧтобы увидеть результаты оптимизации, можно:• вывести отчет по решению (Tools/Generate Output File on Go, или Ctrl-8);• вставить в файл модели инструкции для вывода

результатов;• вывести результаты в файл данных или базу данных

(работу с базами данных мы рассмотрим позднее).Простейшей инструкцией для вывода результатовявляется команда displayДобавьте в файл с моделью следующие команды(обратите внимание на расположение – после модели,но перед разделом данных; до вывода результатовнужно обязательно дать команду на решение модели –solve)

20

Page 21: Тренинг GLPK, часть 1: Модель планирования производства

Результаты оптимизации• Запустите расчет кнопкой F5 или• Если возникает синтаксическая ошибка, то в консоли будет указан номер строки, где она

возникла• Если модель правильная, то в отдельной вкладке откроется отчет по решению (pearsets.out), а

в консоли справа - информация о работе оптимизатора и результаты выполнения команды display

• Отчет по решению – это обычный текстовый файл, который создается в той же папке, где находится модель. Позднее его можно открыть в текстовом редакторе, например в SciTe(перетащив в окно GUSEK).

21

Page 22: Тренинг GLPK, часть 1: Модель планирования производства

Отчёт по решениюActivity – ЛЧ ограничения, либо переменная решенияLower/Upper Bound – границы для переменной/ЛЧMarginal – теневая ценаSt – статус переменной(ограничения): • B – базисная (не связывающее ограничение), • NU – связывающее ограничение-неравенство,

достигнут верхний предел ЛЧ, • NL – то же, достигнут нижний предел ЛЧ• NS – связывающее ограничение-равенство

22

Presenter
Presentation Notes
Создаётся, если установлен флаг Tools>Generate Output File on Go Подробнее см. здесь http://en.wikibooks.org/wiki/GLPK/Solution_information#Sensitivity_analysis_report Ещё более подробно – см. файл GLPK.pdf, прилагающийся к программе