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
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)}')