2017-08-25 9 views
0

GAMS: Ich denke, ich habe eine ziemlich einfache Frage, aber ich stecke fest und fragte mich, ob jemand hier helfen könnte.GAMS: Informationen aus der Lösung abrufen

Eine vereinfachte Version meines Modells wie folgt aussieht:

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) und e (i, t) bezogen werden:

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

Jetzt möchte ich Informationen abrufen aus der Lösung: Nehmen wir an, ich möchte wissen, wo te (i, t) einen bestimmten Wert hat -> e (i, t) = x (i) oder anders formuliert e (i, t = TD) = x (i) finde TD, wobei x (i) somit von i abhängt. Weiß jemand, wie ich das in mein GAMs-Modell schreiben kann? Um klar zu sein, ich möchte nichts über meine Lösung und das Modell, das ich ausgeführt habe, ändern; Ich möchte nur diese Informationen aus der gegebenen Lösung abrufen.

Bis jetzt habe ich versucht ein paar Dinge und nichts hat funktioniert. Ich denke, das muss einfach sein, kann jemand helfen? Vielen Dank!

Antwort

1

versuchen, etwas wie folgt aus:

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; 

Hoffnung, dass Lutz

+0

Vielen Dank für die schnelle Antwort und dieses arbeitete hilft! Ich habe es bereits ein paar Mal versucht, um dies mit geordneten Sets zu erreichen, aber Ihre Antwort zeigte schließlich einen richtigen Weg! – ima

+0

Nur eine letzte Frage: In der GDX-Datei erscheint die Nummer von t direkt neben der Antwort. Aber wenn ich es zeige oder entlade, lande ich mit dem ganzen Graphen mit Ja und leeren Zellen. Gibt es eine Möglichkeit, nur den Wert von T anstelle des gesamten Graphen zu exportieren? – ima

+0

T ist ein Set in meinem Beispiel, also hat es eigentlich keinen Wert. Ich bin mir also nicht ganz sicher, was Sie meinen "in der GDX-Datei erscheint die Zahl von t gleich neben der Antwort". Wenn Sie jedoch nur ein Element in einem Satz haben und eine Zahl daraus erhalten möchten, sollten Sie den ord-Operator wie folgt überprüfen: set tt/t1 * t10/ t (tt)/t5 /; Skalar ausgewähltT; selectedT = Summe (t (tt), ord (tt)); Anzeige ausgewähltT; – Lutz

Verwandte Themen