Lös kapitalbudgeteringsproblemet
Kom ihåg kapitalbudgeteringsproblemet.
Din chef utformar företagets strategi och överväger projekten \(A\), \(B\), \(C\), där \(A\) är en förutsättning för \(B\). Vinsterna är respektive \(V = [250, 200, 300]\), den erforderliga investeringen är I = [2000, 1900, 2500] och endast 4 600 dollar är tillgängliga. \(o\) är en binär variabel som anger om ett projekt väljs.
Din chef gav dig följande 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\)
Din uppgift är att linjärisera och lösa vinstproblemet.
Vi har redan importerat pulp och definierat en model med parametrarna V, I, names för projektnamnen (A, B, C och AB indexerade i den ordningen) samt o som representerar det binära beslutet med samma indexering.
Den här övningen är en del av kursen
Introduktion till optimering i Python
Övningsinstruktioner
- Definiera den linjäriserade målfunktionen genom att fylla i funktionen för projekt B och C, med hänsyn till förutsättningarna för B.
- Definiera begränsningarna med hjälp av den uppdaterade AB-variabeln.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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)}')