IniziaInizia gratis

Risoluzione del problema di capital budgeting

Ricorda il problema di capital budgeting.

La tua responsabile definisce la strategia dell’azienda e valuta i progetti \(A\), \(B\), \(C\), con \(A\) prerequisito per \(B\). I profitti sono rispettivamente \(V = [250, 200, 300]\), l’investimento richiesto è I = [2000, 1900, 2500] e sono disponibili solo $4600. \(o\) è una variabile binaria che indica se un progetto è selezionato.

La tua responsabile ti ha fornito il seguente problema:

\(\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\)

Il tuo compito è linearizzare e risolvere il problema di massimizzazione del profitto.

Abbiamo già importato pulp e definito un model con i parametri V, I, names per i nomi dei progetti (A, B, C e AB indicizzati in quell’ordine) e o che rappresenta la decisione binaria usando lo stesso indice.

Questo esercizio fa parte del corso

Introduzione all'ottimizzazione in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Definisci la funzione obiettivo linearizzata compilando i termini per i progetti B e C, considerando il prerequisito per B.
  • Definisci i vincoli usando la variabile AB aggiornata.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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)}')
Modifica ed esegui il codice