Het kapitaalbegrotingsprobleem oplossen
Denk terug aan het kapitaalbegrotingsprobleem.
Je manager bepaalt de strategie van het bedrijf en overweegt projecten \(A\), \(B\), \(C\), en \(A\) is de vereiste voor \(B\). De winsten zijn respectievelijk \(V = [250, 200, 300]\), de benodigde investering is I = [2000, 1900, 2500] en er is slechts $4600 beschikbaar. \(o\) is een binaire variabele die aangeeft of een project geselecteerd is.
Je manager gaf je het probleem:
\(\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\)
Jouw taak is om het winstprobleem te linearizeren en op te lossen.
We hebben pulp al geïmporteerd en een model gedefinieerd met de parameters V, I, names voor de projectnamen (A, B, C en AB in die volgorde geïndexeerd), en o dat de binaire beslissing weergeeft met dezelfde indexering.
Deze oefening maakt deel uit van de cursus
Introductie tot optimalisatie in Python
Oefeninstructies
- Definieer de gelineariseerde doelfunctie door de functie voor project B en C in te vullen, rekening houdend met de voorwaarde voor B.
- Definieer de beperkingen met de bijgewerkte AB‑variabele.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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)}')