【问题标题】:GAMS - setting binary variables depending on variablesGAMS - 根据变量设置二进制变量
【发布时间】:2018-03-18 08:23:12
【问题描述】:

我遇到了 GAMS 中的二进制变量建模问题。

当质量流 m_rc_ts 和 m_rc_pb 都等于 0 时,我想将二进制变量 nrc 设置为 1。 这就是我实现以下等式的原因:

e_nrc_lo(i+1) .. m_rc_ts(i+1)+m_rc_pb(i+1) =g= (1-nrc(i+1)); e_nrc_up(i+1) .. m_rc_ts(i+1)+m_rc_pb(i+1) =l= m_rcmax*(1-nrc(i+1));

我从 tha GAMS 世界论坛获得了这些方程的语法:logical equations & binary variables

所以如果我在数学上做对了,如果质量流量等于 0,它应该是这样的:

0 + 0 >= 1 - nrc 0 + 0

导致:

nrc >= 1 和 nrc

我实现了这个变量,所以只有这些等式。初始值为 1。

如果我现在运行它,我会从方程式列表中得到以下信息:

e_nrc_lo(1)..  m_rc_ts(1) + m_rc_pb(1) + nrc(1) =G= 1 ; (LHS = 1)

e_nrc_lo(2)..  m_rc_ts(2) + m_rc_pb(2) + nrc(2) =G= 1 ; (LHS = 0
 , INFES = 1 ****)

e_nrc_lo(3)..  m_rc_ts(3) + m_rc_pb(3) + nrc(3) =G= 1 ; (LHS = 0
 , INFES = 1 ****)

e_nrc_up(1)..  m_rc_ts(1) + m_rc_pb(1) + 282*nrc(1) =L= 282 ; (LHS = 282)

e_nrc_up(2)..  m_rc_ts(2) + m_rc_pb(2) + 282*nrc(2) =L= 282 ; (LHS = 0)

e_nrc_up(3)..  m_rc_ts(3) + m_rc_pb(3) + 282*nrc(3) =L= 282 ; (LHS = 0)

*The column list gives the following:

nrc(1)
            (.LO, .L, .UP, .M = 0, 1, 1, 0)
    1       e_nrc_lo(1)
  282       e_nrc_up(1)

nrc(2)
            (.LO, .L, .UP, .M = 0, 0, 1, 0)
    1       e_nrc_lo(2)
  282       e_nrc_up(2)

nrc(3)
            (.LO, .L, .UP, .M = 0, 0, 1, 0)
    1       e_nrc_lo(3)
  282       e_nrc_up(3)

m_rc_ts(1)
            (.LO, .L, .UP, .M = 0, 0, 282, 0)
    1       e_nrc_lo(1)
    1       e_nrc_up(1)
   (0)      e_nts(1)
    1       e_m_rc_same(1)
    1       e_ts_rc_same(1)
   (0)      e_charge(1)
   -5.8864  e_Re(1)
   -0.0001  e_U(1)
 (-12.5642) e_h(1)

m_rc_ts(2)
            (.LO, .L, .UP, .M = 0, 0, 282, 0)
    1       e_nrc_lo(2)
    1       e_nrc_up(2)
   (0)      e_nts(2)
    1       e_m_rc_same(2)
    1       e_ts_rc_same(2)
   (0)      e_charge(2)
   -5.8864  e_Re(2)
   -0.0001  e_U(2)

m_rc_ts(3)
            (.LO, .L, .UP, .M = 0, 0, 282, 0)
    1       e_nrc_lo(3)
    1       e_nrc_up(3)
   (0)      e_nts(3)
    1       e_m_rc_same(3)
    1       e_ts_rc_same(3)
   (0)      e_charge(3)
   -5.8864  e_Re(3)
   -0.0001  e_U(3)

m_rc_pb(1)
            (.LO, .L, .UP, .M = 0, 0, 112, 0)
    1       e_nrc_lo(1)
    1       e_nrc_up(1)
    1       e_m_pbmax(1)
(-838)      e_T_pi(1)
    1       e_m_pb_same(1)
   (0)      e_T_po(1)
   (0)      e_P_out(1)
    1       e_m_rc_same(1)

m_rc_pb(2)
            (.LO, .L, .UP, .M = 0, 0, 112, 0)
    1       e_nrc_lo(2)
    1       e_nrc_up(2)
    1       e_m_pbmax(2)
(-839)      e_T_pi(2)
    1       e_m_pb_same(2)
  (-0.0597) e_T_po(2)
(30340)      e_P_out(2)
    1       e_m_rc_same(2)

m_rc_pb(3)
            (.LO, .L, .UP, .M = 0, 0, 112, 0)
    1       e_nrc_lo(3)
    1       e_nrc_up(3)
    1       e_m_pbmax(3)
(-839)      e_T_pi(3)
    1       e_m_pb_same(3)
  (-0.0597) e_T_po(3)
(30340)      e_P_out(3)
    1       e_m_rc_same(3)

我不知道为什么,方程 e_nrc_lo 没有将二进制变量 nrc 设置为 1,只是说,方程是不可行的。我的意思是等式的全部目的是将变量设置为1。有什么明显的,我看不到吗?还是可能更复杂?

提前谢谢各位!

干杯

【问题讨论】:

    标签: binary gams-math


    【解决方案1】:

    方程列表和列列表是关于输入点的,而不是关于解的。要查看结果(解决方案),请继续往下查看“解决方案报告”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2018-08-25
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多