Ограничение с использованием оператора IF

Я использую GAMS для решения проблемы сетевого распределения, и я использую GAMS впервые. У меня есть следующее ограничение (см. Изображение), которое я хочу написать в gams, но продолжаю получать ошибки. Попытка выяснить это с помощью оператора IF или любого другого способа решить эту проблему. Переменная z - это уже объявленная двоичная переменная.

Спасибо!

Изображение


person Manal Jain    schedule 12.06.2017    source источник


Ответы (2)


Вам не нужен оператор if, но вы можете справиться с этим с помощью долларовых условий. Вы можете сделать это с долларовыми условиями в уравнении (как сделано здесь), или вы можете написать три отдельных уравнения с долларовыми условиями, чтобы определить область каждого уравнения.

E_z(u,v,i).. sum(j, z(u,v,j,i)) - sum(j, z(u,v,i,j)) 
=E= 
0 + 1$(sameas(i,u)) - 1$(sameas(i,v));

Оператор sameas задокументирован здесь. Если в ваших наборах есть числовые значения, было бы проще провести сравнение значений, например $ (i.val = u.val).

person Martin Bonde    schedule 12.06.2017
comment
Часть 0 + непосредственно после = E = может быть даже опущена, поскольку 1 $ (sameas (i, u)) будет оцениваться как 0, если i и u не совпадают, но это просто косметика и, вероятно, вопрос личного вкуса. . - person Lutz; 14.06.2017
comment
да. Я думал, что сделать это яснее. Лично я предпочел бы иметь три отдельных уравнения. - person Martin Bonde; 16.06.2017

Вы можете узнать больше об условных выражениях в GAMS по следующей ссылке:

https://www.gams.com/latest/docs/userguides/userguide/_u_g__cond_expr.html

person Salva    schedule 13.06.2017