2017-08-25 6 views
0

GAMS: Je pense que j'ai une question assez simple, mais je suis coincé et je me demandais si quelqu'un pouvait aider ici.GAMS: récupérer des informations de la solution

Une version simplifiée de mon modèle ressemble à ceci:

set(i,t) ; 
    parameter price 
       D; 
    variable p(i,t) 
      e(i,t); 
    equations 
      Equation1 
obj.. C=sum((i,t), p(i,t)*price); 
Model file /all/ ; 
Solve file minimizing C using MIP ; 
Display C.l; 

p (i, t) et e (i, t) sont liés:

Equation1 .. e(i,t)=e=e(i,t-1)+p(i,t)*D 

Maintenant, je veux récupérer des informations de la solution: disons que je veux savoir à quel te (i, t) a une certaine valeur par exemple -> e (i, t) = x (i) ou autrement formulé e (i, t = TD) = x (i) trouver TD, où x (i) dépend donc de i. Est-ce que quelqu'un sait comment je peux écrire ceci dans mon modèle GAMs? Pour être clair, je ne veux rien changer à ma solution et au modèle que j'ai. Je veux juste récupérer cette information de la solution donnée. Jusqu'à présent, j'ai essayé quelques trucs et rien n'a fonctionné. Je pense que cela doit être simple, quelqu'un peut-il aider? Je vous remercie!

Répondre

1

Essayez quelque chose comme ceci:

set i /i1*i10/ 
    t /t1*t10/; 
variable e(i,t); 

*some random dummy "solution" 
e.l(i,t) = uniformInt(1,10); 

set find5(i,t) 'find all combinations of i and t for which e.l=5'; 

find5(i,t)$(e.l(i,t)=5) = yes; 

display e.l,find5; 

Espoir qui aide, Lutz

+0

Merci vous pour la réponse rapide et cela a fonctionné! J'ai déjà essayé plusieurs fois d'y parvenir avec des sets commandés, mais votre réponse a finalement montré une bonne façon de le faire! – ima

+0

Juste une dernière question: dans le fichier GDX, le nombre de t apparaît juste à côté de la réponse. Cependant, quand l'afficher ou le décharger je finis avec le graphique entier avec des cellules oui et vides. Existe-t-il un moyen d'exporter uniquement la valeur de T au lieu du graphique entier? – ima

+0

T est un ensemble dans mon exemple, donc il n'a réellement aucune valeur. Donc, je ne suis pas exactement sûr de ce que vous entendez par "dans le fichier GDX, le nombre de t apparaît juste à côté de la réponse". Mais si vous n'avez qu'un seul élément dans un ensemble et que vous voulez en extraire un nombre, vous pouvez vérifier l'opérateur ord comme ceci: set tt/t1 * t10/ t (tt)/t5 /; scalaire selectedT; selectedT = somme (t (tt), ord (tt)); affichage sélectionnéT; – Lutz