Аналитика данных
October 9, 2023

Как оптимизировать распределение ресурсов с помощью линейного программирования?

Линейное программирование - это метод математического моделирования, который позволяет найти оптимальное решение задачи при ограничениях, представленных линейными уравнениями. Оно широко применяется в различных областях, таких как экономика, производство, логистика и т. д. В данном примере мы рассмотрим, как можно использовать линейное программирование для оптимизации распределения бюджета между отделами организации.

Разберем пример оптимизации распределения бюджета между отделами с помощью линейного программирования на Python.

Установка библиотеки PuLP

Первым шагом будет установка библиотеки PuLP, которая позволяет работать с линейным программированием в Python.

pip install pulp

Импорт необходимых библиотек и создание переменных

Импортируем библиотеку PuLP и создаем переменные, представляющие распределение бюджета между отделами.

import pulp
# Создаем задачу оптимизации
model = pulp.LpProblem("BudgetOptimization", pulp.LpMaximize)
# Переменные представляют распределение бюджета между отделами
x1 = pulp.LpVariable("x1", lowBound=0)  # Бюджет для первого отдела
x2 = pulp.LpVariable("x2", lowBound=0)  # Бюджет для второго отдела

Формулирование целевой функции

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

# Формулируем целевую функцию (максимизация суммарного бюджета)
model += 3*x1 + 2*x2, "Total_Budget"

Формулирование ограничений

Устанавливаем ограничения на распределение бюджета.

# Ограничения бюджета
model += x1 <= 40, "Budget_Constraint1"  # Бюджет первого отдела <= 40
model += x2 <= 30, "Budget_Constraint2"  # Бюджет второго отдела <= 30

Решение задачи оптимизации

Теперь мы можем решить задачу оптимизации и вывести оптимальное распределение бюджета.

# Решаем задачу оптимизации
model.solve()
# Выводим оптимальное распределение бюджета
print("Оптимальное распределение бюджета:")
print("Бюджет для первого отдела (x1):", pulp.value(x1))
print("Бюджет для второго отдела (x2):", pulp.value(x2))

Результат выполнения кода:

Оптимальное распределение бюджета:
Бюджет для первого отдела (x1): 40.0
Бюджет для второго отдела (x2): 30.0

Объяснение кода:

  1. import pulp: Эта строка импортирует библиотеку Pulp, которая используется для линейного программирования.
  2. model = pulp.LpProblem("BudgetOptimization", pulp.LpMaximize): Здесь создается объект model, представляющий задачу оптимизации. Мы называем эту задачу "BudgetOptimization" и указываем, что это задача максимизации.
  3. x1 = pulp.LpVariable("x1", lowBound=0): Создается переменная x1, которая представляет бюджет для первого отдела. Мы устанавливаем нижнюю границу этой переменной как 0, потому что бюджет не может быть отрицательным.
  4. x2 = pulp.LpVariable("x2", lowBound=0): Аналогично создается переменная x2 для бюджета второго отдела.
  5. model += 3*x1 + 2*x2, "Total_Budget": Здесь формулируется целевая функция, которую мы хотим максимизировать. Она представляет суммарный бюджет, где у первого отдела коэффициент 3, а у второго - 2. "Total_Budget" - это название целевой функции.
  6. model += x1 <= 40, "Budget_Constraint1": Добавляется ограничение на бюджет первого отдела. Он не может быть больше 40, поэтому мы устанавливаем это условие.
  7. model += x2 <= 30, "Budget_Constraint2": Аналогично добавляется ограничение на бюджет второго отдела - не больше 30.
  8. model.solve(): Эта строка запускает решение задачи оптимизации.
  9. print("Оптимальное распределение бюджета:"): Выводит сообщение о том, что будет выведено оптимальное распределение бюджета.
  10. print("Бюджет для первого отдела (x1):", pulp.value(x1)): Выводит оптимальное значение бюджета для первого отдела.
  11. print("Бюджет для второго отдела (x2):", pulp.value(x2)): Выводит оптимальное значение бюджета для второго отдела.

Этот код демонстрирует простое применение линейного программирования для решения задачи оптимизации бюджета.