Skip to content

Оптимизационная модель (задача линейного программирования, ЛП)

Данные на входе

  • количество дней периода планирования (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)