Оптимизационная модель (задача линейного программирования, ЛП)
Данные на входе
- количество дней периода планирования (
n_days
) - параметры производства (
plant
) - портфель заказов (
order_dict
) - отдельные параметры оптимизации (сейчас - коэффициент штрафа за хранение запасов)
Используются ограничения:
- неотрицательные остатки
- сумма производства равна сумме потребления за период
- ограничения по сроку хранения
Целевая функция
Задается целевая функция (метод set_objective()
):
- выручка минус затраты минус штраф за хранение
Переменные решения
Определяются (decision variables):
-
<P>_AcceptOrder_<i>
- бинарные переменые брать/не брать i-й заказ на продукт на продукт, доступен через метод
.orders_accepted()
илиorder_status_all()
-
Production_<P>_<d>
- объем производства продуктав день d, доступен через метод
.production_values()
Выражения
Рассчитываются выражения (по дням и товарам):
inventories
- остатки на складе на днямpurchases
- отгрузка со склада по дням, тоннinternal_use
- потребности внутреннего использования, тоннrequirement
- общая потребность в товарах для отгрузки и для внутреннего использвоания, тонн
В сумме за период по всем товарам:
sales
- продажи, в денежном выраженииcost
- затраты, в денежном выражении- штраф за хранение
Пример кода
Определение класса здесь. Использование:
ex1 = PlantModel(
"Two products model example1_py", n_days, plant1, inventory_penalty=1.5
)
ex1.evaluate_orders(order_dict)
ex1.save()
print_solution(ex1)