2017-05-23 1 views
0

donc je voulais exécuter ce code:inattendue forall erreur de syntaxe

constraint ctMachine[Machine]; 
subject to{ 
forall(i in Machine) 
    forall (k in Week) 
    ctMachine[i]: sum(j in Product) 
    ResourceConsumption[i][j] * Units[j][k] <= Capacity[i]; 

Mais si je le fais, je reçois l'erreur ctMachine [1] a déjà été attribué, ce qui est logique. J'ai donc essayé de mettre la seconde boucle après la fonction somme, comme ceci:

constraint ctMachine[Machine]; 
subject to{ 


forall(i in Machine) 
    ctMachine[i]: sum(j in Product) 
    forall(k in Week) 
    ResourceConsumption[i][j] * Units[j][k] <= Capacity[i]; 

Mais je reçois l'erreur de syntaxe, forall inattendue. Mais comment puis-je le faire alors. J'ai besoin de la constranint pour tout k. Je suis assez novice en programmation linéaire et en OPL, donc je n'ai aucune idée de comment je peux résoudre ça maintenant. BTW je ne peux pas simplement enlever l'étiquette de contrainte puisque j'en ai aussi besoin.

Répondre

0

Je supprimerais

contrainte ctMachine [Machine];

et écrire

forall (i dans la machine)
ctMachine: somme (j produit)
somme (k semaine) ResourceConsumption [i] [j] * Unités [ j] [k] < = Capacité [i];

concerne