【发布时间】: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。有什么明显的,我看不到吗?还是可能更复杂?
提前谢谢各位!
干杯
【问题讨论】: