如果在Gnu Mathprog中嵌套能量模型

时间:2015-07-14 08:47:47

标签: gnu glpk 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];

我想把这两个约束放在一个,我想插入两个条件表达式(if)。第一个if,将被称为技术(t)和燃料(f),其中OutputActivityRatio&lt;&gt; 0并且对于相同技术(t)的第二个,它将再次开始检查f(燃料)以查看InputActivityRatio&lt;&gt; 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),并且它们之间也有一个等式?我怎么能写出类似的东西? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

如您在其他问题中所述(关于在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];

这里在左侧总和中,一个乘法将变为零。 由于我不知道哪些部分是变量以及哪些参数,这个解决方案也可能失败(例如,如果同时存在输入和输出并且模型的其余部分不包含正确的边界,则可能会出现问题为此)