Zacznij terazZacznij za darmo

Rozwiązywanie problemu budżetowania kapitałowego

Przypomnij sobie problem budżetowania kapitałowego.

Twój menedżer projektuje strategię firmy i rozważa projekty \(A\), \(B\), \(C\), przy czym \(A\) jest warunkiem wstępnym realizacji \(B\). Zyski wynoszą odpowiednio \(V = [250, 200, 300]\), wymagane nakłady inwestycyjne to I = [2000, 1900, 2500], a dostępny budżet wynosi 4600 $. \(o\) to zmienna binarna określająca, czy dany projekt zostaje wybrany.

Menedżer przekazał ci następujący problem:

\(\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\)

Twoim zadaniem jest zlinearyzowanie i rozwiązanie tego problemu maksymalizacji zysku.

Biblioteka pulp jest już zaimportowana, a model zdefiniowany wraz z parametrami V, I, names dla nazw projektów (A, B, C oraz AB – indeksowane w tej kolejności) oraz o reprezentującym binarne zmienne decyzyjne z tym samym indeksowaniem.

To ćwiczenie jest częścią kursu

Wprowadzenie do optymalizacji w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Zdefiniuj zlinearyzowaną funkcję celu, uzupełniając wyrażenia dla projektów B i C z uwzględnieniem warunków wstępnych dla B.
  • Zdefiniuj ograniczenia, korzystając ze zaktualizowanej zmiennej AB.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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)}')
Edytuj i uruchom kod