НачатьНачать бесплатно

Решение задачи распределения капитала

Вспомним задачу распределения капитала.

Ваш менеджер разрабатывает стратегию компании и рассматривает проекты \(A\), \(B\), \(C\), при этом \(A\) является обязательным условием для реализации \(B\). Прибыли составляют \(V = [250, 200, 300]\), необходимые инвестиции — \(I = [2000, 1900, 2500]\), а доступный бюджет не превышает $4600. Переменная \(o\) — бинарная и показывает, выбран ли проект.

Менеджер поставил перед вами следующую задачу:

\(\max\ \ o_AV_A + o_{AB}V_B + o_CV_C\) \(s.t.\ o_AI_A + o_{AB}I_B + o_CI_C\leq 4600\)

Ваша задача — линеаризовать и решить задачу максимизации прибыли.

Библиотека pulp уже импортирована, а model определена с параметрами V, I, names для названий проектов (A, B, C и AB — в таком порядке) и o, представляющей бинарное решение с той же индексацией.

Это упражнение является частью курса

Введение в оптимизацию на Python

Посмотреть курс

Инструкции к упражнению

  • Определите линеаризованную целевую функцию, заполнив выражения для проектов B и C с учётом предварительного условия для B.
  • Определите ограничения, используя обновлённую переменную AB.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Define the objective
model += o[0]*V[0] + ____*V[1] + ____*V[2]

# Define the constraints
model += o[0]*I[0] + ____*I[1] + o[2]*I[2] <= 4600, 'budget constraint'
model += o[____] <= o[0]
model += o[____] <= o[1]
model += o[____] >= o[0] + o[1] - 1 

status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")

for i, name in enumerate(names):
    print(f"{name}: {'accepted' if o[i].varValue == 1 else 'rejected'}")
print(f'Total profit = ${value(model.objective)}')
Редактировать и запускать код