Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

518 views

Published on

Первая часть тренинга по решению задач оптимизации в пакете GLPK. В презентации рассматриваются основные компоненты оптимизационной модели и их реализация на языке MathProg на примере задачи планирования производства. Рассматриваются автоматически формируемые отчеты по решению.

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Основы моделирования в пакете GUSEK/GLPK v 0.3 2015-02-17 Производство компьютеров Pear (модель с отдельными ресурсами) Заходякин Г.В. postlogist@gmail.com
  2. 2. План занятия • Содержательная постановка задачи • Концептуальное моделирование • Компоненты оптимизационной модели • Реализация в GLPK 2
  3. 3. Содержательная постановка задачи • Компания «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
  4. 4. Математическая постановка задачи • Переменные решения: 𝑥𝑥1, 𝑥𝑥2, 𝑥𝑥3- объем выпуска ПК, Ноутбуков, Серверов • Целевая функция: 𝐹𝐹 = 10𝑥𝑥1 + 20𝑥𝑥2 + 100𝑥𝑥3 → 𝑚𝑚𝑚𝑚𝑚𝑚 • Система ограничений: 1 2 𝑥𝑥1 + 𝑥𝑥2 + 5𝑥𝑥3 ≤ 400 𝑥𝑥1 + 𝑥𝑥2 ≤ 120 2𝑥𝑥3 ≤ 120 𝑥𝑥1 ≥ 10 𝑥𝑥2 ≥ 10 2 ≤ 𝑥𝑥3 ≤ 20 4
  5. 5. Старый знакомый • На рисунке показана табличная модель для решения задачи с помощью «Поиска решения» – Каждый столбец таблицы отвечает за один из множества продуктов (1) – Строка таблицы соответствует либо переменной решения (2), либо свойству продукта (3) – В ячейках таблицы находятся данные для решения задачи – численные значения свойств (параметров) продуктов (4) – Справа от таблицы находятся линейные выражения, которые вычисляют итоговые значения прибыли и расхода ресурсов, зависящие от плана производства и свойств продуктов (5) – левые части (системы ограничений) – Еще правее находятся значения правых частей ограничений – это также параметры, относящиеся уже не к отдельным продуктам, а к ресурсам производства (6) ❶ ❷ ❸ ❹ ❺ ❻ 5
  6. 6. Модель и решение • Если задать имена диапазонов Excel, то модель Поиска решения будет довольно наглядной • На рисунке показано оптимальное решение задачи • Красным цветом выделены связывающие ограничения – ограничения, для которых в оптимальном решении совпадают значения левой и правой части. Именно они не дают улучшить решение 6
  7. 7. Концептуальная модель • Если число выпускаемых продуктов изменится, то принципиальных изменений в модели не произойдет. Станет больше переменных и слагаемых в левых частях ограничений. • Общую структуру задачи можно отразить с помощью концептуальной модели – Круги обозначают элементы множества продуктов P (для примера показаны те же элементы, что и в исходной задаче) – Прямоугольники обозначают ресурсы производства – линии сборки и тестирования – Числа рядом с ресурсами обозначают доступные количества каждого ресурса (параметры) – Линии между продуктами и ресурсами отображают связи между ними. Количественной характеристикой каждой связи является технологический коэффициент (yдельный расход ресурса), например на сборку ПК требуется 0,5 часа – С продуктами связаны переменные решения – объемы производства 𝑴𝑴 и параметры – удельная прибыль 𝐼𝐼 Сборка Линия А Линия B ПК Ноут бук Сер- вер 400 ч 120 ч 120 ч АПК = 0,5 P (продукты) TАсервер = 0 𝑴𝑴ПК 𝑴𝑴Ноутбук 𝑴𝑴Сервер 𝐼𝐼ПК = 10 7
  8. 8. Математическая модель: отдельные ресурсы 𝐹𝐹 = � 𝑝𝑝∈𝑃𝑃 𝑀𝑀𝑝𝑝 𝐼𝐼𝑝𝑝 → 𝑚𝑚𝑚𝑚𝑚𝑚 � 𝑝𝑝∈𝑃𝑃 𝐴𝐴𝑝𝑝 𝑀𝑀𝑝𝑝 ≤ 𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴 � 𝑝𝑝∈𝑃𝑃 𝑇𝑇𝑇𝑇𝑝𝑝 𝑀𝑀𝑝𝑝 ≤ 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 � 𝑝𝑝∈𝑃𝑃 𝑇𝑇𝑇𝑇𝑝𝑝 𝑀𝑀𝑝𝑝 ≤ 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝐷𝐷𝐷𝐷𝐷𝐷𝑛𝑛𝑝𝑝 ≤ 𝑀𝑀𝑝𝑝 ≤ 𝐷𝐷𝐷𝐷𝐷𝐷𝑥𝑥𝑝𝑝 ∀𝑝𝑝 ∈ 𝑃𝑃 𝑀𝑀𝑝𝑝 ≥ 0 ∀𝑝𝑝 ∈ 𝑃𝑃 Обозначения: • 𝑃𝑃 = ПК, Ноутбук, Сервер - множество продуктов, 𝑝𝑝 ∈ 𝑃𝑃 – индекс продукта • 𝑀𝑀𝑝𝑝 - объем производства продукта 𝑝𝑝, переменные решения • 𝐼𝐼𝑝𝑝- прибыль от продажи единицы продукта 𝑝𝑝 • 𝐷𝐷𝐷𝐷𝐷𝐷𝑛𝑛𝑝𝑝, 𝐷𝐷𝐷𝐷𝐷𝐷𝑥𝑥𝑝𝑝 - минимальный и максимальный спрос на продукт 𝑝𝑝 • 𝐴𝐴𝑝𝑝, 𝑇𝑇𝐴𝐴𝑝𝑝, 𝑇𝑇𝑇𝑇𝑝𝑝- технологические коэффициенты для линии сборки, тестирования А и тестирования B (удельный расход ресурса 𝑟𝑟 на производство продукта 𝑝𝑝) • 𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴, 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇, 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 - доступное количество ресурса 𝑟𝑟 • Символ ∀ (квантор общности) читается: «для каждого». Например, ∀𝑝𝑝 обозначает, что ограничение по cпросу должно выполняться для каждого продукта Сборка Линия А Линия B ПК Ноут бук Сер- вер 400 ч 120 ч 120 ч АПК = 0,5 P (продукты) TАсервер = 0 𝑴𝑴ПК 𝑴𝑴Ноутбук 𝑴𝑴Сервер 𝐼𝐼ПК = 10 8
  9. 9. Компоненты оптимизационной модели • Для формализации модели на языке моделирования необходимо определить следующие компоненты: 1. Множества (set) – соответствуют типам объектов в содержательной постановке задачи – продукты, клиенты, периоды времени, ресурсы и т.п.; содержат названия или коды этих объектов 2. Параметры (parameter) – содержат количественные характеристики, которые заранее известны; могут иметь одно значение, или характеризовать каждый элемент некоторого множества 3. Переменные (var) – содержат неизвестные заранее количественные характеристики объектов, т.е. решения, которые необходимо принять в задаче оптимизации 4. Целевая функция (minimize/maximize) – линейное выражение, соответствующее критерию эффективности в задаче 5. Ограничения (subject to) – линейное выражение, соответствующее некоторому ограничению/требованию • Порядок определения компонентов произвольный, но компонент, который включается в выражение, должен быть обязательно уже определен. Поэтому удобен именно такой порядок определения, как на этом слайде: параметры и переменные почти всегда зависят от множеств. Без переменных и параметров невозможно записать ни одно выражение для целевой функции или ограничений. 9
  10. 10. Подготовка • Запустите GUSEK и сохраните пустой файл модели под именем pearsets.mod (например, на рабочий стол) – Расширение должно быть обязательно .mod, от этого зависит подсветка команд и доступный набор действий с файлом • В этом примере мы будем хранить и модель, и данные в одном файле 10
  11. 11. Математическая модель на MathProg: множества • Здесь мы определили множество, которое будет использоваться в модели для обозначения продуктов – PRODUCTS • Элементы множества на этапе формализации модели задавать не следует, их указывают потом, в разделе данных. Это позволяет разделить модель и данные, что существенно упрощает совершенствование модели и сценарный анализ. • Обратите внимание: • MathProg чувствителен к регистру, PRODUCTS <> Products <> products • имена компонентов задачи должны быть уникальными в пределах модели • рекомендуется множествам давать понятные названия и использовать заглавные буквы, чтобы подчеркнуть, что это именно множество, и предотвратить возможные коллизии имен • каждая команда в MathProg должна заканчиваться точкой с запятой • в файле нужно использовать комментарии, чтобы не забыть, для чего нужны обозначения и команды; комментарии начинаются с # или заключаются в /* */. Файлы без комментариев рассматриваться не будут! 11
  12. 12. Параметры • Здесь мы определили три параметра, определенные на множестве продуктов. Обозначение {PRODUCTS} – это индексирующее выражение, которое означает, что для каждого продукта существует свое значение параметра • Значения параметров на этапе формализации модели задавать не следует; они задаются в данных • При определении параметра min_demand указана проверка (>=0): значение параметра не может быть отрицательным. Это позволяет избежать ошибок в данных: не удовлетворяющие условию значения программа отвергнет. Проверка применяется к данным, в отличие от ограничения, которое применяется к переменным или их линейным комбинациям. Поэтому при записи условий для проверки допускается больше возможностей (условия, нелинейность…), чем при записи ограничений. Проверка не является частью задачи оптимизации, она лишь предотвращает построение задач с некорректными данными. • Также для параметра min_demand указано значение по умолчанию (default). Значение по умолчанию будет автоматически использовано, если в данных не указано другое значение. Это удобно, если значение параметра одно и то же для большинства или всех элементов множества, или если параметр почти никогда не изменяется аналитиком. • При определении параметра max_demand использовано индексирующее выражение, в котором вводится обозначение для индекса – p. Это необходимо, т.к. в дальнейшем мы хотим сравнить максимальный и минимальный спрос на один и тот же продукт. Для этого используется обращение по индексу – demand[p]. Выражение можно прочитать так: для каждого продукта p максимальный спрос должен быть не меньше, чем минимальный спрос на этот продукт. • 9999 – это большое число, которое заведомо превышает максимально возможный объем выпуска продуктов. • Обратите внимание: • MathProg чувствителен к регистру, profit <> Profit <> PROFIT и p <> P • рекомендуется параметрам давать понятные названия и использовать строчные буквы, чтобы предотвратить возможные коллизии имен; для разделения слов в имени можно использовать подчеркивание, и нельзя – пробелы • русские символы в именах компонентов модели использовать нельзя 12
  13. 13. Параметры (2) • Параметры для технологических коэффициентов (расход ресурсов) определены аналогично. По умолчанию удобно задать, что продукт не использует ресурс (расход 0). • Доступное время на каждом ресурсе – это характеристика ресурса, а не продуктов, поэтому эти параметры – скалярные, у каждого только одно значение 13
  14. 14. Переменные решения • Определив множества и параметры, можно приступить к формализации модели. Однако, поскольку все выражения в модели зависят от решений, необходимо сначала объявить переменные решения • Переменная make будет содержать одно значение для каждого продукта, т.к. она определена на множестве PRODUCTS. • Условие >= 0 при определении переменной – это граница (bound). Граница – специальный тип ограничения, который задает допустимый диапазон для отдельной переменной, без использования линейных выражений. В данном случае объем производства для каждого продукта не может быть отрицательным 14
  15. 15. Целевая функция • У целевой функции есть имя (TotalProfit) и выражение - расчетная формула, которая записывается через двоеточие после имени. У каждого компонента модели (ограничение, целевая функция) должно быть уникальное в пределах модели имя. Для обеспечения уникальности имен рекомендуется писать имена ограничений/целевых функций с заглавной буквы • Выражение sum {p in PRODUCTS} обозначает, что сумма произведений прибыли и объема производства будет вычисляться для каждого продукта. 15
  16. 16. Ограничения • Каждое ограничение, как и в случае целевой функции, имеет имя (Assembly) и выражение, которое записывается через двоеточие после имени. Для обеспечения уникальности имен ограничений рекомендуется писать имена ограничений/целевых функций с заглавной буквы • Выражение sum {p in PRODUCTS} обозначает, что сумма произведений прибыли и объема производства будет вычисляться для каждого продукта. • В отличие от целевой функции, у ограничения есть правая часть – обычно там находится константа, например, обозначающая доступное количество ресурса. 16
  17. 17. Ограничения (2) • Ограничения по другим ресурсам записываются аналогично. • У ограничения по спросу есть два отличия: • команда определяет сразу семейство ограничений – для каждого продукта; это достигается за счет использования индексирующего выражения {p in PRODUCTS} после имени ограничения; введенный здесь индекс p можно использовать в выражении для ограничения; • ограничение двухстороннее (в MathProg такая запись поддерживается, только когда верхний и нижний пределы – константы. Если же пределы зависят от переменных, то ограничение надо разбить на два односторонних) 17
  18. 18. Данные для модели Данные для решения задачи в этом примере будут содержаться в том же файле, что и модель. Раздел данных начинается с ключевого слова data; Обычно вначале задаются элементы множеств. При перечислении элементы можно разделять любым количеством пробелов, знаков табуляции и переводов строки. Значения элементов множеств могут содержать русские буквы и пробелы, но в этом случае их надо брать в кавычки. Например: set PRODUCTS := “Компьютер” “Рабочая станция”; 18
  19. 19. Данные для модели • При определении значения параметра нужно указывать название элемента множества и значение параметра для этого элемента. Например, PC 10 означает, что прибыль при реализации одного PC составляет 10 денежных единиц • Скалярные параметры задаются просто как числа • Конец файла обозначается с помощью ключевого слова: end; 19
  20. 20. Вывод результатов Чтобы увидеть результаты оптимизации, можно: • вывести отчет по решению (Tools/Generate Output File on Go, или Ctrl-8); • вставить в файл модели инструкции для вывода результатов; • вывести результаты в файл данных или базу данных (работу с базами данных мы рассмотрим позднее). Простейшей инструкцией для вывода результатов является команда display Добавьте в файл с моделью следующие команды (обратите внимание на расположение – после модели, но перед разделом данных; до вывода результатов нужно обязательно дать команду на решение модели – solve) 20
  21. 21. Результаты оптимизации • Запустите расчет кнопкой F5 или • Если возникает синтаксическая ошибка, то в консоли будет указан номер строки, где она возникла • Если модель правильная, то в отдельной вкладке откроется отчет по решению (pearsets.out), а в консоли справа - информация о работе оптимизатора и результаты выполнения команды display • Отчет по решению – это обычный текстовый файл, который создается в той же папке, где находится модель. Позднее его можно открыть в текстовом редакторе, например в SciTe (перетащив в окно GUSEK). 21
  22. 22. Отчёт по решению Activity – ЛЧ ограничения, либо переменная решения Lower/Upper Bound – границы для переменной/ЛЧ Marginal – теневая цена St – статус переменной(ограничения): • B – базисная (не связывающее ограничение), • NU – связывающее ограничение-неравенство, достигнут верхний предел ЛЧ, • NL – то же, достигнут нижний предел ЛЧ • NS – связывающее ограничение-равенство 22

×