我有一个关于GAMS的问题 . 我是GAMS的初学者 . 我正在使用minlp和scip solver .
我正在尝试为集中式太阳能发电厂的热能存储系统建模 . 我现在正忙着为坦克操作策略建模方程式,所以无论是在放电还是充电模式 . 我正在模拟一个温跃层油箱,同时充电热水箱从油箱顶部进入,并从底部推出冷htf . 对于放电过程,它是另一种方式 .
操作策略取决于来自接收器或功率块的质量流量,它们是决策变量 . 对于不同的操作策略,热能存储器的入口和出口温度改变 . 因此,有些方程在逻辑上取决于决策变量的值 .
问题是,如果我尝试使用逻辑条件(使用if运算符或$运算符)及其中的变量来定义方程式,我会得到错误52或53“不允许内生$ -control操作” . 这似乎是使用solve语句得到的错误,因为不可能将决策变量置于逻辑条件中 . 在互联网上做了一些研究后,我发现了这些威胁,在这里可以很好地解释:
https://forum.gamsworld.org/viewtopic.php?f=13&t=6795
所以这个问题我得到了一些问题:
有没有人知道一种可能的方法,我可以在哪里建模方程式,这在逻辑上取决于决策变量?或者这对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 回答
你不能使用变量本身,但你可以使用它的属性:所以你不能写
但
工作(它是变量的级别) .