首页 文章

GAMS:在逻辑条件下使用变量

提问于
浏览
0

我有一个关于GAMS的问题 . 我是GAMS的初学者 . 我正在使用minlp和scip solver .

我正在尝试为集中式太阳能发电厂的热能存储系统建模 . 我现在正忙着为坦克操作策略建模方程式,所以无论是在放电还是充电模式 . 我正在模拟一个温跃层油箱,同时充电热水箱从油箱顶部进入,并从底部推出冷htf . 对于放电过程,它是另一种方式 .

操作策略取决于来自接收器或功率块的质量流量,它们是决策变量 . 对于不同的操作策略,热能存储器的入口和出口温度改变 . 因此,有些方程在逻辑上取决于决策变量的值 .

问题是,如果我尝试使用逻辑条件(使用if运算符或$运算符)及其中的变量来定义方程式,我会得到错误52或53“不允许内生$ -control操作” . 这似乎是使用solve语句得到的错误,因为不可能将决策变量置于逻辑条件中 . 在互联网上做了一些研究后,我发现了这些威胁,在这里可以很好地解释:

https://forum.gamsworld.org/viewtopic.php?f=13&t=6795

Use variable in GAMS dollar

所以这个问题我得到了一些问题:

有没有人知道一种可能的方法,我可以在哪里建模方程式,这在逻辑上取决于决策变量?或者这对GAMS来说是不可能的,所以我需要切换到另一种语言来解决这个问题?

这些将是重要的方程式:

e_charge(i+1)$(m_rc_ts(i+1) > 0) .. dec(i+1) =e= 1;

e_discharge(i+1)$(m_pb_ts(i+1)) .. dec(i+1) =e= 2;

e_no_use(i+1)$(m_rc_ts(i+1) = 0 and m_pb_ts(i+1) = 0) .. dec(i+1) =e= dec(i);

e_m_rc_ts_restrict(i+1)$(dec(i+1) = 2) .. m_rc_ts(i+1) =e= 0;

e_m_pb_ts_restrict(i+1)$(dec(i+1) = 1) .. m_pb_ts(i+1) =e= 0;

e_T_ti_charge(nfirst,i+1)$(dec(i+1)= 1) .. T_fl(nfirst,i+1) =e= T_ro;

e_T_ti_discharge(nfirst,i+1)$(dec(i+1)= 2) .. T_fl(nfirst,i+1) =e= T_po(i+1);

谢谢你的帮助!

干杯

1 回答

  • 0

    你不能使用变量本身,但你可以使用它的属性:所以你不能写

    $(dec(i+1))
    

    $(dec.l(i+1))
    

    工作(它是变量的级别) .

相关问题