GAMS - 根据变量

时间:2018-03-18 08:23:13

标签: binary gams-math

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

当质量流量m_rc_ts和m_rc_pb都等于零时,我想将二进制变量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&gt; = 1 - nrc 0 + 0 <= 282 *(1-nrc)

导致:

nrc&gt; = 1且nrc&lt; = 1,这导致唯一的解决方案nrc = 1.

我实现了变量,因此它们是唯一的方程式。初始值为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.是否有明显的东西,我无法看到?或者它可能更复杂?

先谢谢你,伙计们!

干杯

1 个答案:

答案 0 :(得分:0)

公式列表和列列表是关于输入点,而不是关于解决方案。要查看结果(解决方案),请进一步查看&#34;解决方案报告&#34;。