Kom igångKom igång gratis

Fördela resurser

Bra jobbat – nu är det dags att lösa nästa problem.

En chef fördelar 120 uppgifter mellan en senior (S), en junior (J) och en praktikant (I) inom mjukvaruutveckling och vill minimera kostnaderna.

Praktikanten behöver utbildning som kostar 500 kr innan arbetet kan påbörjas. Kostnaden för att lösa varje uppgift är c = [30, 40, 5] respektive.

\(x\) anger antalet tilldelade uppgifter och \(o\) är den binära variabeln för om praktikanten får utbildning. Den totala kostnaden är

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

Använd BigM-metoden för att linjärisera problemet med den nya variabeln \(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, tillsammans med en model, parametrarna c, M och names, samt variablerna x, z och o har redan importerats åt dig.

Den här övningen är en del av kursen

Introduktion till optimering i Python

Visa kurs

Övningsinstruktioner

  • Definiera målfunktionen genom att ersätta en del av formeln med z.
  • Definiera bivillkoren och fyll i indexet för praktikanten.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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