Aan de slagGa gratis aan de slag

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

Cursus bekijken

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)}')
Code bewerken en uitvoeren