2017-08-25 98 views
0

GAMS:我想我有一个非常简单的问题,但是我被卡住了,想知道是否有人可以在这里帮忙。GAMS:从解决方案中检索信息

我的模型的简化版本是这样的:

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(1,t)和E(I,T)的关系:

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

现在我想要检索信息从解决方案:让我说我想知道在什么te(我,吨)有一个特定的价值,例如 - > e(i,t)= x(i)或以其他方式表述e(i,t = TD)= x(i)找到TD,其中x(i)因此取决于i。有谁知道我可以如何写入我的GAM模型?要明确我不想改变我的解决方案和我运行的模型;我只想从给出的解决方案中检索这些信息。

到目前为止,我尝试了一些事情,没有任何工作。我认为这一定很简单,任何人都可以帮忙吗?谢谢!

回答

1

尝试这样:

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; 

希望帮助, 卢茨

+0

感谢你的快速反应和这个工作!我已经尝试了几次,以便通过有序集合来实现这一点,但是您的响应最终显示了正确的方式! – ima

+0

只是最后一个问题:在GDX文件中,t的数字出现在答案的旁边。但是,当显示或卸载它时,我最终会看到带有yes和empty单元格的整个图表。有没有办法只导出T的值而不是整个图? – ima

+0

T是我的例子中的一个集合,所以它实际上没有任何价值。所以我不完全确定你的意思是什么“在GDX文件中t的数量出现在答案旁边”。但是如果一组中只有一个元素并想从中得到一个数字,那么可能需要检查这里的ord运算符: set tt/t1 * t10/ t(tt)/ t5 /; scalar selectedT; (t(tt),ord(tt));其中, display selectedT; – Lutz