我在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];我想把这两个约束放在一起,我正在考虑插入两个条件表达式( if ),第一个if,将引用技术(T).The fuel(F),其中OutputActivityRatio<>0和第二个相同技术(T),它将再次开始检查f(fuels),看看是否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 ;我的问题是:有没有可能有两个if串联在一起(嵌套if),并且在它们之间也有一个等式?我怎么能写出这样的东西?非常感谢!
发布于 2015-08-04 19:51:55
正如你的另一个问题(关于mathprog中嵌套的if-then-else )所描述的,在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];在左边的求和中,一个乘法会变成零。由于我不知道哪些部分是变量,哪些是参数,这种解决方案也可能失败(例如,如果同时有输入和输出,而模型的其余部分没有包含正确的界限,则可能会出现问题)
https://stackoverflow.com/questions/31401965
复制相似问题