2016-09-09 3 views
0

Je travaille avec SolverStudio (complément Excel) et PuLP (langage d'optimisation basé sur Python) pour créer un outil qui affecte les étudiants aux lieux de travail.Impression d'indices de variables tridimensionnelles dans PuLP pour la planification

C'est la variable dont les indices que je veux imprimer:

# Decision variable, =1 if student s is assigned to working place w on day d; 0 otherwise Assignment = LpVariable.dicts("Assignment",(Students,Working_places,Days),0,1,LpBinary)

, je veux Pour chaque lieu de travail et jour pour sortir le nom de l'étudiant qui est affecté là-bas, afin de créer un programme.

Mon approche actuelle est:

for w in Working_places: 
    for d in Days: 
     for s in Students: 
      if Assignment[s][w][d] == 1: 
       Schedule[w,d] = Name[s] 

Schedule[w,d] est un paramètre vide 2d défini dans SolverStudio et Name[s] contient les noms des élèves.

J'ai placé la séquence de code à différentes positions du modèle. Cela ne fait aucune différence, que ce soit avant ou après l'instruction prob.solve().

Actuellement, Schedule[w,d] est rempli complètement avec le nom du dernier étudiant dans la liste des étudiants. J'ai observé que la clause if est complètement ignorée. Je peux l'enlever et la même sortie est générée.

Existe-t-il une manière différente de dire à Python "pour chaque lieu de travail et chaque jour, d'imprimer l'étudiant assigné"?

Merci beaucoup d'avance!

Répondre

0

trouvé l'erreur moi-même dans l'intervalle:

for w in Working_places: for d in Days: for s in Students: if Assignment[s][w][d].varValue == 1: Schedule[w,d] = Name[s]