【发布时间】:2018-08-22 03:35:36
【问题描述】:
我有一个关于 GAMS 的问题。我是 GAMS 的初学者。 我正在使用 minlp 和 scip 求解器。
我正在尝试为集中式太阳能发电厂的热能存储系统建模。 我现在一直在为油箱操作策略的方程建模,所以无论是在放电模式还是充电模式。我正在模拟一个温跃层罐,在充电时,热的 htf 从罐的顶部进入并从底部推出冷的 htf。放电过程则相反。
依赖于来自接收器或功率块的质量流量的操作策略,它们是决策变量。对于不同的操作策略,热能存储的入口和出口温度会发生变化。所以有一些方程在逻辑上依赖于决策变量的值。
问题是,如果我尝试使用带有变量的逻辑条件(使用 if 运算符或 $ 运算符)来定义方程,我会得到错误 52 或 53 “内生 $-control 操作不是允许”。这似乎是您在使用求解语句时遇到的错误,因为无法将决策变量置于逻辑条件中。在互联网上进行了一些研究后,我发现了这些威胁,并对其进行了很好的解释:
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);
感谢您的帮助!
干杯
【问题讨论】:
标签: dollar-sign gams-math