ÎncepețiÎncepe gratuit

Alocarea resurselor

Bine făcut! Acum e momentul să rezolvi următoarea problemă prezentată anterior.

Un manager alocă 120 de sarcini unui inginer software senior (S), unul junior (J) și unui stagiar (I) și dorește să minimizeze costurile.

Stagiarul necesită o formare care costă 500 $ înainte de a începe lucrul. Costul pentru rezolvarea fiecărei sarcini este c = [30, 40, 5], respectiv.

\(x\) reprezintă numărul de sarcini atribuite, iar \(o\) variabila binară care indică dacă stagiarului i se asigură formarea. Costul total este:

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

Folosește metoda BigM pentru a liniariza această problemă cu ajutorul noii 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, împreună cu un model, parametrii c, M și names, precum și variabilele x, z, o au fost deja importate pentru tine.

Acest exercițiu face parte din cursul

Introducere în optimizare în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Definește funcția obiectiv înlocuind o parte din formulă cu z.
  • Definește constrângerile completând indexul stagiarului.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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}")
Editează și rulează codul