IniziaInizia gratis

Assegnazione delle risorse

Ottimo lavoro, è il momento di risolvere il prossimo problema che ti è stato presentato.

Un manager assegna 120 task a un software engineer senior (S), uno junior (J) e un intern (I) e vuole minimizzare i costi.

L'intern richiede una formazione che costa $500 prima di iniziare a lavorare sui task. Il costo per risolvere ciascun task è c = [30, 40, 5] rispettivamente.

\(x\) indica il numero di task assegnati e \(o\) la variabile binaria che indica se l'intern riceve la formazione. Il costo totale è

\(TC = 30x_S+40x_J+(5x_I+500)o\)

Usa il metodo BigM per linearizzare questo problema introducendo la nuova variabile \(z\):

\(z = (5x_I+500)o\)

\(-oM\leq z \leq oM\)

\(-(1-o)M \leq z- (5x_I+500)o \leq (1-o)M\)

pulp, insieme a un model, ai parametri c, M e names, e alle variabili x, z, o sono già stati importati per te.

Questo esercizio fa parte del corso

Introduzione all'ottimizzazione in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Definisci l'obiettivo sostituendo parte della formula con z.
  • Definisci i vincoli inserendo l'indice dell'intern.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# Define the objective
model += c[0]*x[0] + c[1]*x[1] + ____

# Define the constraints
model += -o * M <= z
model += z <= o * M
model += -(1-o) * M <= z - (c[___]*x[____] + 500)
model += z - (c[____]*x[____] + 500) <= (1-o) * M
model += lpSum(x) >= 120

status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")
for i in range(len(c)):
    print(f"{names[i]} was assigned {x[i].varValue:.0f}")
Modifica ed esegui il codice