Aan de slagGa gratis aan de slag

Middelen toewijzen

Mooi werk, tijd om het volgende probleem op te lossen waar je aan bent voorgesteld.

Een manager wijst 120 taken toe aan een senior (S), een junior (J) en een stagiair (I) software engineer en wil de kosten minimaliseren.

De stagiair heeft training nodig die $500 kost voordat hij aan de taken kan werken. De kosten om elke taak op te lossen zijn respectievelijk c = [30, 40, 5].

\(x\) bevat het aantal toegewezen taken en \(o\) is de binaire variabele voor of de stagiair training krijgt. De totale kosten zijn

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

Gebruik de BigM-methode om dit probleem te lineariseren met de nieuwe variabele \(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, samen met een model, parameters c, M en names, en variabelen x, z, o zijn al voor je geïmporteerd.

Deze oefening maakt deel uit van de cursus

Introductie tot optimalisatie in Python

Cursus bekijken

Oefeninstructies

  • Definieer de doelfunctie door een deel van de formule te vervangen door z.
  • Definieer de restricties en vul daarbij de index van de stagiair in.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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}")
Code bewerken en uitvoeren