0

J'essaie d'ajouter une contrainte à un problème de programmation linéaire en python en utilisant la bibliothèque pulp. J'ai essayé le code ci-dessous.Contrainte pulpe Python

for week in range(14,52), i in I.index: 
    k = week 
    model += sum(x[(i, j, week, B)] for week in range(k, k+13), 
             j in J.index) <= 1 

où I et J ai suivant les indices

I.index = ['A','B','C'] 
J.index = [1,2,3] 

L'erreur que je reçois est SyntaxError: Generator expression must be parenthesized if not sole argument. J'ai recherché ce lien Generator expression must be parenthesized if not sole argument mais il n'a pas semblé résoudre mon problème. Toute aide est appréciée.

+1

pâte Idk, mais je pense que même votre première ligne est fausse, puisqu'elle est compilée à quelque chose comme: 'pour la semaine (range (14,52), je dans I.index)', donc votre boucle for est juste itérée sur 2 éléments, le premier est le générateur 'range' (peut-être c'est le problème) et le second est une instruction booléenne (comme 1 dans [1,2,3] == True) –

Répondre

0

Ou le commentaire de Duan semble correct la syntaxe utilisée doit être

for week in range(14,52), i in I.index: 
    k = week 
    model += sum(x[(i, j, week, B)] for week in range(k, k+13) 
            for j in J.index) <= 1 

mais dans ce cas, il sera beaucoup plus rapide si vous utilisez la fonction lpSum()

for week in range(14,52), i in I.index: 
    k = week 
    model += lpSum(x[(i, j, week, B)] for week in range(k, k+13) 
            for j in J.index) <= 1