【问题标题】:GAMS: Using variables in logical conditionsGAMS:在逻辑条件下使用变量
【发布时间】: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

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);

感谢您的帮助!

干杯

【问题讨论】:

    标签: dollar-sign gams-math


    【解决方案1】:

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

    $(dec(i+1))
    

    但是

    $(dec.l(i+1))
    

    有效(它是变量的级别)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多