LoslegenKostenlos loslegen

Ressourcen zuweisen

Gute Arbeit, jetzt geht es mit dem nächsten Problem weiter.

Eine Führungskraft verteilt 120 Aufgaben an einen Senior- (S), Junior- (J) und Intern-/Praktikant:innen- (I) Software Engineer und möchte die Kosten minimieren.

Der Praktikant benötigt vor Beginn eine Schulung für 500 $, bevor er an den Aufgaben arbeiten kann. Die Kosten zur Bearbeitung jeder Aufgabe sind c = [30, 40, 5] in der jeweiligen Reihenfolge.

\(x\) enthält die Anzahl zugewiesener Aufgaben und \(o\) die Binärvariable, ob der Praktikant die Schulung erhält. Die Gesamtkosten sind

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

Verwende die Big-M-Methode, um dieses Problem mit der neuen Variable \(z\) zu linearisieren:

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

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

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

pulp sowie ein model, die Parameter c, M und names und die Variablen x, z, o sind bereits für dich importiert.

Diese Übung ist Teil des Kurses

Einführung in Optimierung mit Python

Kurs anzeigen

Anleitung zur Übung

  • Definiere die Zielfunktion, indem du den entsprechenden Term durch z ersetzt.
  • Definiere die Nebenbedingungen und setze dabei den Index für den Intern (Praktikanten).

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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 bearbeiten und ausführen