GAMS - установка бинарных переменных в зависимости от переменных

У меня возникла проблема с моделированием двоичных переменных в GAMS.

Я хочу установить двоичную переменную nrc равной 1, когда массовые потоки m_rc_ts и m_rc_pb равны нулю. Вот почему я реализовал следующие уравнения:

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

Синтаксис этих уравнений я получил на всемирном форуме GAMS: логические уравнения и двоичные переменные

Итак, если я правильно понимаю математически, если массовые потоки равны нулю, это должно выглядеть так:

0 + 0> = 1 - nrc 0 + 0 ‹= 282 * (1-nrc)

что приводит к:

nrc> = 1 и nrc ‹= 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. Есть ли что-то очевидное, чего я не вижу? Или может быть посложнее?

Заранее спасибо, ребята!

Ваше здоровье


person Help621    schedule 18.03.2018    source источник


Ответы (1)


Список уравнений и список столбцов относятся к точке ввода, а не к решению. Чтобы увидеть результаты (решение), спуститесь вниз и перейдите в «Отчет о решении».

person Erwin Kalvelagen    schedule 22.03.2018