IBM优化工作室CPLEX OPL的问题



i使用IBM优化工作室CPLEX(OPL)开发程序,我尝试执行此行:

 If (P_p(t) >= (P_L(t))/(Einv ))
 Pb(t) = Pb0+(Eb_c/3600)*(Pp(t)-P_L(t))/Einv)
 t Є {t0,t0+1,,t0+nΔt} , Δt: step time

我做了这样的事情:

maximize ....
subject to {
....
forall(j in NH: Pp[j] >= Pl[j]/Einv)
Pb[j] == Pb0 + (Eb_c/3600)*(Pp[j]- Pl[j]/Einv);
...
}

给我这个错误:"决策变量(或表达式)不允许",我尝试了很多解决方案,但它不起作用,我在任何文档,表达式或一种方法中都找不到的问题这样吗?!

编辑

,但我没有什么要添加的解释,我在主题中写的firt代码,我应该使用Studio cplex创建它。

我试图最大程度地降低系统产生的功率成本,因此内部必须检查一个时间t期间的每个模拟时间的条件,如果条件正确,请执行下一行代码否则我们将传递给PB(T)的另一个值?!

问题是在内部使用样品时间t,如果条件和内部则受到!

的约束

尽管这个问题已经3岁了,但我还是要回答,因为这是一个常见的问题。

您不能在forallif语句的条件下使用决策变量。但是,您可以通过逻辑约束来实现想要的目标。就您而言,您需要的是"暗示"约束(使用" =>"操作员):

forall(j in NH) {
   (Pp[j] >= Pl[j]/Einv) => (Pb[j] == Pb0 + (Eb_c/3600)*(Pp[j]- Pl[j]/Einv));
}

" =>"操作员的右侧仅在左侧为真时才能执行。

最新更新