Вложено ли в Gnu Mathprog для энергетической модели
У меня есть код в Gnu Mathprog для энергетической модели:
s.t.EBa1_RateOfFuelProduction1{r in REGION, l in TIMESLICE, f in FUEL, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR: OutputActivityRatio[r,t,f,m,y] <> 0}:
RateOfActivity[r,l,t,m,y]*OutputActivityRatio[r,t,f,m,y] = RateOfProductionByTechnologyByMode[r,l,t,m,f,y];
s.t.EBa4_RateOfFuelUse1{r in REGION, l in TIMESLICE, f in FUEL, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR: InputActivityRatio[r,t,f,m,y]<>0}:
RateOfActivity[r,l,t,m,y]*InputActivityRatio[r,t,f,m,y] = RateOfUseByTechnologyByMode[r,l,t,m,f,y];
Я хочу поместить эти два ограничения в одно, и я думаю вставить два условных выражения (если). Первое, если, будет относиться к технологии (t) и fuel (f), где OutputActivityRatio<>0, а второе для той же технологии (t) он снова начнет проверять f (топлива), чтобы увидеть, если InputActivityRatio<>0. Как это:
s.t.RateOfProduction{r in REGION, l in TIMESLICE, f in FUEL, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR: OutputActivityRatio[r,t,f,m,y] <>0}:
RateOfActivity[r,l,t,m,y]*OutputActivityRatio[r,t,f,m,y] = RateOfProductionByTechnologyByMode[r,l,t,m,f,y]
If InputActivityRatio[r,t,ff,m,y]<>0 then
RateOfActivity[r,l,t,m,y]*InputActivityRatio[r,t,f,m,y] = RateOfUseByTechnologyByMode[r,l,t,m,f,y]
else 0
else 0 ;
У меня вопрос: возможно ли иметь два, если последовательно (вложено если) и между ними также есть уравнение? Как я могу написать что-то подобное? Большое спасибо!
1 ответ
Как описано в вашем другом Вопросе (относительно вложенного if-then-else в mathprog), в mathprog нет операторов If-Then-Else. Обходной путь с условными циклами for также не является решением вашей проблемы, поскольку вы можете использовать их только до или после обработки ваших данных (вы не можете использовать это в своих ограничениях!).
Но есть все еще возможности объединить ваши ограничения. Я думаю, что-то вроде следующего будет работать, если ваше условие, что либо Вход или Выход равен 0.
s.t.RateOfProduction{r in REGION, l in TIMESLICE, f in FUEL, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR}:
(RateOfActivity[r,l,t,m,y]*OutputActivityRatio[r,t,f,m,y])
+ (RateOfActivity[r,l,t,m,y]*InputActivityRatio[r,t,f,m,y])
= RateOfProductionByTechnologyByMode[r,l,t,m,f,y];
Здесь в левостороннем суммировании одно умножение станет нулевым. Так как я не знаю, какие части являются переменными, а какие параметрами, это решение также может дать сбой (например, это может быть проблематично, если есть ввод и вывод одновременно, а остальная часть модели не содержит правильных границ). для этого)