ПочатиПочніть безкоштовно

Розв'язання задачі інвестування капіталу

Згадайте задачу інвестування капіталу.

Ваш менеджер формує стратегію компанії та розглядає проєкти \(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)}')
Редагувати та запускати код