CommencerCommencer gratuitement

Affecter des ressources

Beau travail, passons au problème suivant qui vous a été présenté.

Un manager répartit 120 tâches entre un ingénieur logiciel senior (S), un junior (J) et un alternant (I) et souhaite minimiser les coûts.

L’alternant nécessite une formation à 500 $ avant de commencer les tâches. Le coût pour traiter chaque tâche est c = [30, 40, 5] respectivement.

\(x\) représente le nombre de tâches assignées et \(o\) la variable binaire indiquant si l’alternant reçoit la formation. Le coût total est

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

Utilisez la méthode Big-M pour linéariser ce problème à l’aide de la nouvelle variable \(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, ainsi qu’un model, les paramètres c, M et names, et les variables x, z, o ont déjà été importés pour vous.

Cet exercice fait partie du cours

Introduction à l’optimisation en Python

Afficher le cours

Instructions

  • Définissez l’objectif en remplaçant la partie de la formule par z.
  • Définissez les contraintes en utilisant l’index de l’alternant.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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}")
Modifier et exécuter le code