Задача 1 Постановка задачи На первом складе (А1) содержится сталь двух марок: 2500 т марки «а» и 6000 т марки «б». Сталь этих марок содержится также и на втором складе (А2) в следующих количествах: 2700 т марки «а» и 5900 т марки «б». Сталь должна быть вывезена в два пункта потребления: в пункт В1 необходимо поставить 2700 т стали марки «а», 3000 т марки «б» и остальные 300 т стали любой марки. Аналогично второй пункт потребления В2 должен получить 9600 т стали, из них 1000 т марки «а» и 8000 т марки «б». Известно, что 1 т стали марки «а» может заменить 2.9 т стали марки «б» (то есть, вместо стали марки «б» можно использовать соответствующее количество стали марки «а», но не наоборот). Стоимость перевозок в денежных единицах (ДЕ) за тонну составляют: из пункта А1 в пункты В1 и В2 4.1 ДЕ и 3.8 ДЕ, и из пункта А2 в В1 и В2, соответственно, 4.8 ДЕ и 3.8 ДЕ. Требуется найти план перевозок стали, минимизирующий затраты на перевозки; полученное решение необходимо исследовать. 1. Провести параметрическое изменение правых частей: • если в решении отсутствуют перевозки с заменой марок стали («а» на «б»), то провести постепенное изменение запасов на обоих складах (увеличение - для стали марки «а», и уменьшение для стали марки «б») до тех пор, пока по крайней мере 100 т стали марки «а» не будут направлены на замену стали марки «б»; • если в решении присутствуют такие перевозки, то провести обратное постепенное изменение запасов, пока перевозки с заменой марок стали не исчезнут (рассмотреть вариант только с увеличением запасов стали марки «б» без изменения запасов стали марки «а» на обоих складах) 2. Провести параметрическое изменение целевой функции: • предварительно существенно увеличить запасы стали обеих марок (в правых частях), чтобы на предпочтительность перевозок стали той или иной марки не влияли ограничения по запасам; • убедиться в отсутствии замен (или в их наличии), для чего заново решить задачу; • затем провести постепенное изменение (увеличение или уменьшение - по смыслу) стоимости перевозок стали марки «б» (при прежней стоимости перевозок стали марки «а») до появления хотя бы 100 т замены (или до исчезновения замен). Формализация задачи g Пусть xik – это объём поставки стали марки g из склада i в пункт потребления k. Задачи со взаимозаменяемыми ресурсами решаются путем выражения объемов одного ресурса в единицах другого. Например, в данной задаче выпишем все ограничения в единицах стали марки «𝑎». Тип ограничения Марка стали Запасы на складе 𝑎 А1 б Запасы на складе 𝑎 А2 б Потребность 𝑎 пункта б потребления B1 Любая марка Потребность пункта потребления B2 𝑎 б Любая марка В исходных ед. 2500 6000 2700 5900 2700 3000 300 1000 8000 600 В единицах стали марки «а» 2500 2069 2700 2035 2700 1035 104 1000 2759 207 Там, где нам неважна марка стали, мы можем взять стал марки «б» и заменить её на сталь марки а. Общая потребность стали обоих пунктов потребления составляет 15600 тонн, а в запасе имеется 17100 тонн стали. Задача несбалансированная. Ограничения на наличие ресурсов: 𝑎 𝑎 𝑥11 + 𝑥12 ≤ 2500, 𝑏 𝑏 𝑥11 + 𝑥12 ≤ 6000, 𝑎 𝑎 𝑥21 + 𝑥22 ≤ 2700, 𝑏 𝑏 𝑥21 + 𝑥22 ≤ 5900. Ограничения по потреблению стали марки «а», т.к. она является незаменимой: 𝑎 𝑎 𝑥11 + 𝑥21 ≥ 2700, 𝑎 𝑎 𝑥12 + 𝑥22 ≥ 1000. И сталь марки «б», и сталь «любой марки» можно заменить сталью марки «а». Поэтому выпишем ограничение на общее количество поставляемой стали всех марок, выраженное в единицах стали марки «𝑎»: 𝑎 𝑎 ) 𝑏 𝑏 (𝑥11 + 𝑥21 + 0.345 ∗ (𝑥11 + 𝑥21 ) = 3839, 𝑎 𝑎 ) 𝑏 𝑏 (𝑥12 + 𝑥22 + 0.345 ∗ (𝑥12 + 𝑥22 ) = 3966, 3839 и 3966 тонн – это потребность первого и второго пунктов потребления стали, выраженное в стали марки «а», а 0.345 коэффициент обмена стали. Задача состоит в минимизации суммарных расходов на производство и перевозку. Поэтому в качестве целевой функции получим следующее выражение: 𝑎 𝑏 ) 𝑎 𝑏 ) 𝑎 𝑏 ) 𝑎 𝑏 4.1 ∗ (𝑥11 + 𝑥11 + 3.8 ∗ (𝑥12 + 𝑥12 + 4.8 ∗ (𝑥21 + 𝑥21 + 3.8 ∗ (𝑥22 + 𝑥22 ) → 𝑚𝑖𝑛. Решение задачи Библиотека PuLP – библиотека Python для решения задач оптимизации. Для решения данной задачи была использована эта библиотека. Рис. 1 – решение задачи Если увеличить общие запасы стали «а», то стоимость перевозки уменьшится. Это связано с тем, что стоимость перевозки стали марки «а» ниже, чем марки «b». Изначально известно, что количество стали марки «b» превышает нужное количество для производства, поэтому изменения количества стали марки «b» ни к чему не приведёт (если не уменьшится ниже необходимого). Увеличение запасов стали марки «a» приводит к естественному уменьшению перевозки, т.к. эту сталь перевозить дешевле. И можно заметить, что, если максимизировать запасы стали марки «a», и минимизировать запасы стали «b», стоимость перевозки будет стремиться к минимуму. Рис. 2 – увеличение запасов стали марки «а» Исследуем обратное. Минимизируем запасы стали марки «а», чтобы исключить замену стали. Менять запасы стали «b» в данном случае бессмысленно. Можно увидеть (рис. 3), насколько возросла стоимость перевозки при этом. Рис. 3 – результат исследования Куда интереснее дела обстоят с целевой функцией. Предварительно существенно увеличим запасы стали обеих марок (в правых частях), чтобы на предпочтительность перевозок стали той или иной марки не влияли ограничения по запасам. При этом, как выяснилось ранее от замены стали этот шаг нас не избавит. Наоборот, количество заменяемой стали должно увеличиться. Проверим это, заново решив задачу (увеличим запасы стали в 10 раз). Рис. 4 - результат работы программы Чтобы как-то изменить ситуацию проведем изменение целевой функции, а именно постепенное изменение стоимости перевозок стали марки «b» (при прежней стоимости перевозок стали марки «a») до исчезновения замен (рис. 5). Рис. 5 – изменение целевой функции Видно, что замены не производятся. Далее уменьшать стоимость перевозки нецелесообразно, т.к. «a» и «b» просто поменяются местами. Стоимость доставки будет уменьшаться только за счёт уменьшение доставки 1 единицы материала. Задача 2 Постановка задачи В пункте В2 сталь поступает на условный производственный комплекс, состоящий из сталелитейного и станкостроительного заводов. Он функционирует в течение 5 лет. 1 Теория принятия решений 2020-2021 (весна) Начальный запас стали составляет 4900 т (для решения; интервал для исследования — 1000–10000 т (*)). Исходные производственные мощности заводов соответственно: • по стали — 5800 т в год; • по станкам — 1800 станков в год (для решения; интервал для исследования — 100–5000 станков). (**) Сталь расходуется на производство станков (1.1 т на каждый) и собственно стали, а также на расширение производственных мощностей комплекса. При этом каждая тонна стали, направленная на ее производство, обеспечивает выпуск 4.0 т. Тонна стали, идущая на расширение производственной мощности сталелитейного завода, увеличивает последнюю на 0.2 т, а для увеличения производственных мощностей станкостроительного завода на один станок необходимо затратить 6 т стали. Реализация решения о распределении стали на следующий год осуществляется в конце очередного года планируемого периода; станкостроительный завод не может получать более половины имеющегося запаса стали. Требуется: 1. определить план распределения стали между сталелитейным и станкостроительным заводами, обеспечивающий выпуск максимального количества станков за плановый период; 2. провести исследование (поочередно, по одному фактору) влияния начальных условий (*) и (**) на структуру и результат решения (т.е. на распределение стали и на объем выпуска станков). Формализация задачи Данная задача решается схожим образом: необходимо определить целевую функцию и задать ограничения. По сути ограничения повторяются каждый год, но необходимо также учитывать расширение мощностей сталелитейного завода и расширение станкостроительного завода. Обозначим: 𝑥1 – масса стали, которая тратится на производство стали в 1 году, 𝑥2 – масса стали, которая тратится на увеличение производственных мощностей сталелитейного завода в 1 году, 𝑥3 – масса стали, которая расходуется на производство станков в 1 году, 𝑥3 – масса стали, которая тратится на увеличение производственных мощностей станкостроительного в 1 году, 𝑥5 … 𝑥20 – аналогичные переменные с повторением на оставшиеся 4 года. Целевая функция: 1 (1.1) (𝑥3 + 𝑥7 + 𝑥11 + 𝑥15 + 𝑥19 ) → max. Ограничения по производственной мощности сталелитейного завода: 4.0𝑥1 ≤ 5800. Ограничение по производственной мощности станкостроительного завода: 1.1𝑥3 ≤ 1800. При этом общая масса используемой стали не может превосходить величины имеющегося запаса: 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 ≤ 4900. То же самое для второго года: 4.0𝑥5 ≤ 5800 + 0.2𝑥2 , 1.1𝑥7 ≤ 1800 + 0.167𝑥4, 𝑥5 + 𝑥6 + 𝑥7 + 𝑥8 ≤ 4.0𝑥1 . То же самое для третьего года: 4.0𝑥9 ≤ 5800 + 0.2𝑥2 + 0.2𝑥6 , 1.1𝑥11 ≤ 1800 + 0.167𝑥4 + 0.167𝑥8 , 𝑥9 + 𝑥10 + 𝑥11 + 𝑥12 ≤ 4.0𝑥5 . То же самое для четвертого года: 4.0𝑥13 ≤ 5800 + 0.2𝑥2 + 0.2𝑥6 + 0.2𝑥10 , 1.1𝑥15 ≤ 1800 + 0.167𝑥4 + 0.167𝑥8 + 0.167𝑥12 , 𝑥13 + 𝑥14 + 𝑥15 + 𝑥16 ≤ 4.0𝑥9. То же самое для пятого года: 4.0𝑥17 ≤ 5800 + 0.2𝑥2 + 0.2𝑥6 + 0.2𝑥10 + 0.2𝑥14 , 1.1𝑥19 ≤ 1800 + 0.167𝑥4 + 0.167𝑥8 + 0.167𝑥12 + 0.167𝑥16 , 𝑥17 + 𝑥18 + 𝑥19 + 𝑥20 ≤ 4.0𝑥13 . Также необходимо расходуемой стали. ввести ограничение на неотрицательность 𝑥𝑖 ≥ 0, 1 ≤ 𝑖 ≤ 20. Важное ограничение, которое вносится условием задачи – ограничение на получение запасов стали: станкостроительный завод не может получать более полвины имеющегося запаса стали: 𝑥3 + 𝑥4 ≤ 4900 2 , −1.5𝑥1 + 0.5𝑥2 + 0.5𝑥3 + 0.5𝑥5 + 𝑥7 + 𝑥8 ≤ 4900 2 , … аналогично для оставшихся годов. Решение задачи Рис. 6 – решение задачи Количество станков: 10752. Реализация решения о распределении стали на следующий год осуществляется в конце очередного года планируемого периода; станкостроительный завод не может получать более половины имеющегося запаса стали. Требуется: 1. определить план распределения стали между сталелитейным и станкостроительным заводами, обеспечивающий выпуск максимального количества станков за плановый период; 2. провести исследование (поочередно, по одному фактору) влияния начальных условий (*) и (**) на структуру и результат решения (т.е. на распределение стали и на объем выпуска станков). Результаты исследования представлены на рис. 7. Рис. 7 – результаты исследования Задача 3 Постановка задачи Склад пункта реализации станков имеет вместимость 15 единиц. Пополнение склада возможно только первого числа каждого месяца. Станки привозят автотранспортом (1 рейс), причем стоимость рейса складывается из постоянных затрат 30 денежных единиц (ДЕ) и затрат на доставку каждого станка 10 ДЕ. За один рейс (и, следовательно, в месяц) может быть доставлено не более 7 станков. Затраты на хранение станка в течение месяца составляют 8 ДЕ. Ожидаемый спрос на станки приведен в табл. 1. Отсутствие требуемого количества станков на складе недопустимо. В начальный момент на складе находится 0 станков. 1. определить план заказов, минимизирующий стоимость; 2. определить границы изменения стоимости хранения станка, в которых найденный план является оптимальным; 3. определить границы изменения постоянных затрат на совершение рейса, в которых найденный план является оптимальным; 4. определить план заказов, минимизирующий стоимость, при условии, что к концу периода на складе должно остаться 1 станков. Таблица 1: Ожидаемый спрос на станки по месяцам Спрос, шт. 1 2 3 5 2 1 4 9 5 6 9 2 Формализация задачи Обозначим спрос на станки по месяцам как 𝑑𝑒𝑚𝑎𝑛𝑑 (𝑑); 𝑁 – количество месяцев, 𝑖 – номер месяца, 1 ≤ 𝑖 ≤ 𝑁, 𝑐𝑎𝑝𝑎𝑐𝑖𝑡𝑦 – максимальное количество станков, 𝑖𝑛𝑖𝑡𝑀𝑎𝑐ℎ𝑖𝑛𝑒𝑠 – начальное количество станков, 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔 – количество станков, которые возможно привезти за месяц, 𝑡𝑟𝑖𝑝 – стоимость рейса, 𝑚𝑜𝑣𝑒𝐶𝑜𝑠𝑡 – стоимость доставки одного станка, 𝑘 – количество привезенных станков, 𝑝 – наличие поставки, 𝑝 = 0, когда нет станков. Также необходимо задать некоторую бесконечность 𝑖𝑛𝑓. Нужно инициализировать переменную заведомо большим числом, чем любая стоимость. Требуется найти такой план производства (𝑥1 , … , 𝑥𝑛 ), компоненты которого удовлетворяют условиям материального баланса: 𝑚𝑖+1 = 𝑚𝑖 + 𝑘𝑖 − 𝑑𝑖 , где 𝑚𝑖 – количество станков к началу 𝑖-го месяца. Обозначим через 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔𝐶𝑜𝑠𝑡 и 𝑘𝑒𝑒𝑝𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠 стоимость доставки и хранения соответственно. 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠 = (𝑘 ∗ 𝑚𝑜𝑣𝑒𝐶𝑜𝑠𝑡) + 𝑡𝑟𝑖𝑝, 𝑘 ≥ 0, 𝑘𝑒𝑒𝑝𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠 = (𝑖 + 𝑘) ∗ 𝑠𝑡𝑜𝑟𝑎𝑔𝑒. 𝑛𝑒𝑤𝑃𝑟𝑖𝑐𝑒𝑖 = 𝑚𝑜𝑣𝑒𝐶𝑜𝑠𝑡𝑖 + 𝑘𝑒𝑒𝑝𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠𝑖 + 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠𝑖 где𝑛𝑒𝑤𝑃𝑟𝑖𝑐𝑒𝑖 – новая вычисленная стоимость. Иначе: 𝑓(𝑘𝑖 ; 𝑚𝑖+1 ) = 𝑛𝑜𝑣𝑒𝐶𝑜𝑠𝑡 ∙ 𝜌𝑖 + 𝑘𝑒𝑒𝑝𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠 ∙ 𝑚𝑖 + 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠 ∙ 𝑘𝑖+1 . При этом важно, чтобы новая вычисленная стоимость была меньше стоимости, вычисленной на прошлом шаге. То есть нужно минимизировать затраты на весь планируемый период: ∑𝑁 𝑖 𝑓(𝑘𝑖 ; 𝑚𝑖 ) → 𝑚𝑖𝑛, 𝑘𝑖 ≥ 0, 𝑚𝑖 ≥ 0. Данная задача из класса задач управления запаса, следовательно, следует применять динамическое программирование. Воспользуемся методом динамического программирования. Необходимо определить параметр состояния 𝛽 и функцию состояния 𝐹𝑖 (𝛽): 𝐹𝑖 (𝛽) = min ∑𝑁 𝑖 𝑓(𝑘𝑖 ; 𝑚𝑖+1 ), 𝐹1 (𝛽 = 𝑚2 ) = 𝑚𝑖𝑛𝑘1 (𝑚𝑜𝑣𝑒𝐶𝑜𝑠𝑡𝜌1 + 𝑘𝑒𝑒𝑝𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠𝑚2 + 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠𝑘1 ), 𝐹𝑖 (𝛽 = 𝑚𝑖+1 ) = 𝑚𝑖𝑛𝑘𝑖 (𝑚𝑜𝑣𝑒𝐶𝑜𝑠𝑡𝜌𝑖 + 𝑘𝑒𝑒𝑝𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠𝑚𝑖+1 + 𝑖𝑛𝑐𝑜𝑚𝑖𝑛𝑔𝐶𝑜𝑠𝑡𝑠𝑘𝑖 + 𝐹𝑘−1 (𝑚𝑖 )), 2 ≤ 𝑖 ≤ 𝑁. Решение задачи Реализация через вложенные циклы: для всех месяцев по количеству станков рассчитываем сколько необходимо привести станков: сколько было на начало месяца – сколько забрали + сколько привезли. По определенному числу станков необходимо рассчитать общие затраты. Если новая стоимость будет меньше имеющейся, то найденное решение лучше предыдущего. Пример работы программы представлен на рис. 8. Рис. 8 – пример работы программы Полученные результаты лучше всего представить в виде таблицы с распределением минимальной стоимости после 𝑖-го месяца, если после 𝑖-го месяца осталось 𝑗 станков (табл. 2). Таблица 2 – Распределение минимальной стоимости Станки Месяц 0 1 2 3 4 0 inf inf inf inf inf 1 inf inf inf inf inf … … … … … … 14 inf inf inf inf inf 15 inf inf inf inf inf На рис. 9 представлено решение поставленной задачи. 5 inf inf … inf inf 6 inf inf … inf inf Рис. 9 – пример работы программы Ответ на поставленную задачу представлен в табл. 3. Таблица 3 – Оптимальные доставки станков Месяц, № 1 2 3 4 5 6 Спрос, шт. 5 2 1 9 9 2 Поставки станков, шт. 7 0 5 7 7 2 156 16 120 188 172 66 Затраты, ДЕ Общие затраты при таком плане поставок составляют 718 ДЕ. При этом минимальная стоимость доставки в месяц составила 0 ДЕ (2 месяц), а максимальная – 100 ДЕ (1, 4, 5 месяцы); минимальная стоимость хранения станков составляет 16 ДЕ, максимальная – 88 ДЕ. Данный план является оптимальным при стоимости хранения станка меньше 15 (табл. 4). Таблица 4 – Оптимальные доставки станков при storage = 15 Месяц, № 1 2 3 4 5 6 Спрос, шт. 5 2 1 9 9 2 Поставки станков, шт. 5 2 5 7 7 2 155 80 155 265 235 80 Затраты, ДЕ Изменение оптимального плана, представленного в табл. 3, наступает при уменьшении постоянных затрат на совершение рейса до 17. План заказов, минимизирующий стоимость, при условии, что к концу периода на складе должен остаться 1 станок, представлен в табл. 5. Таблица 5 – Оптимальные доставки станков Месяц, № 1 2 3 4 5 6 Поставки станков, шт. 7 0 5 7 7 3 Остаток станков, шт. 2 0 4 2 0 1 156 16 120 188 172 84 Затраты, ДЕ Общие затраты при таком плане поставок составляют 736 ДЕ. При этом минимальная стоимость доставки в месяц составила 0 ДЕ (2 месяц), а максимальная – 100 ДЕ (1, 4, 5 месяцы); минимальная стоимость хранения станков составляет 16 ДЕ, максимальная – 88 ДЕ.