【问题标题】:Issue with IBM Optimization Studio CPLEX OPL?IBM Optimization Studio CPLEX OPL 有问题吗?
【发布时间】:2015-07-26 03:25:10
【问题描述】:

我使用 IBM Optimization Studio 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);

...
}

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

编辑

但是我没有什么要补充的,我在我的主题中写的第一个代码,我应该使用工作室 CPLEX 创建它。

我试图最小化系统产生的电力成本,因此在主题内,我必须在 T 期间的每次模拟中检查一个 if 条件,如果 if 条件正确,则执行下一行否则我们将传递给 Pb(t) 的另一个值?!

问题是在 if 条件和在 subject to 内使用采样时间 T!

【问题讨论】:

  • 请明确定义您的决策变量和输入。

标签: cplex opl


【解决方案1】:

虽然这个问题已经 3 年了,但我还是会回答,因为这是一个常见问题。

您不能在forall 或if 语句的条件中使用决策变量。不过,您可以通过逻辑约束来实现您想要的。在您的情况下,您需要的是“隐含”约束(使用“=>”运算符):

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

“=>”运算符的右侧仅在左侧为真时才被强制执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多