Affectation des ressources
Beau travail, passons au prochain problème présenté plus tôt.
Un gestionnaire répartit 120 tâches entre une ou un développeur logiciel senior (S), junior (J) et une personne stagiaire (I), et souhaite minimiser les coûts.
La personne stagiaire doit suivre une formation de 500 $ avant de commencer les tâches. Le coût pour résoudre chaque tâche est c = [30, 40, 5], respectivement.
\(x\) représente le nombre de tâches attribuées et \(o\) l'indicateur binaire indiquant si la personne stagiaire reçoit la formation. Le coût total est
\(TC = 30x_S+40x_J+(5x_I+500)o\)
Utilisez la méthode du grand M (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.
Cette activité fait partie du cours
Introduction à l'optimisation en Python
Instructions de l’exercice
- Définissez l'objectif en remplaçant une partie de la formule par
z. - Définissez les contraintes en utilisant l'indice correspondant à la personne stagiaire.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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}")