Kom igångKom igång gratis

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

Visa kurs

Ö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)}')
Redigera och kör kod