Začněte nyníZačněte zdarma

Přidělování zdrojů

Výborná práce! Teď je čas vyřešit další problém, se kterým ses již setkal/a.

Manažer přiděluje 120 úkolů seniornímu (S), juniornímu (J) a stážistickému (I) softwarovému inženýrovi a chce minimalizovat náklady.

Stážista potřebuje před zahájením práce školení v ceně 500 $. Náklady na vyřešení každého úkolu jsou c = [30, 40, 5].

\(x\) označuje počet přidělených úkolů a \(o\) je binární proměnná určující, zda stážista školení absolvuje. Celkové náklady jsou:

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

Použij metodu BigM k linearizaci tohoto problému pomocí nové proměnné \(z\):

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

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

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

Knihovny pulp, model model, parametry c, M a names a proměnné x, z, o jsou již naimportovány.

Toto cvičení je součástí kurzu

Introduction to Optimization in Python

Zobrazit kurz

Pokyny k cvičení

  • Definuj účelovou funkci tak, že část vzorce nahradíš proměnnou z.
  • Definuj omezení a doplň index stážisty.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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}")
Upravit a spustit kód