CommencezCommencez gratuitement

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

Voir le cours

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