具有决策变量和多重关系的条件语句



这是来自 CPLEX。 我尝试这样做,但没有得到任何结果。基本上,我的模型需要一个具有这两个条件的 forall 语句,使用决策变量和多个关系。所有相等约束。谁能解释一下我的语法有什么问题。 错误:函数运算符<(dvar float+,float(在上下文 CPLEX 中不可用。 文档中的一些屏幕截图和实际方程式随问题一起提供。

问候 债务人图像描述在这里

来自模型的代码。 在此处输入图像描述

forall (a in A, j in Ji[a], n in N: j==jbreak)
{Ts[a][j][n] < tbreak && Tf[a][j][n] > tbreak} => (yvr1[j][n] == yv[j][n]);// && wvr1[a][n] == wv[a][n] && Balr1[a][j][n] == Bal[a][j][n] && Tsr1[a][j][n] == Ts[a][j][n] &&Tfr1[a][j][n] == Tf[a][j][n]);
forall (b in B: b==jbreak,i in Ij[b], n in N) ctTBRD[i][b][n]:
Tsr1[i][b][n] >= tbreak + tmaint;
}  

不允许严格的不平等,所以你可以改变吗

Tf[a][j][n] > tbreak

Tf[a][j][n] >= tbreak+1

扩展亚历克斯的答案:问题确实是不支持严格的不平等。但是,Alex 的解决方案仅在tbreak是整数变量时才有效。根据您的错误消息,tbreak是一个float+变量。所以修复应该是这样的:

Ts[a][j][n] <= tbreak - eps

其中eps是一个小常数,如 1e-6。

但是,使用这些公差总是有点不稳定,因此您可能需要仔细检查是否可以解决此问题。例如,通过使tbreak成为整数变量或还原条件,使严格的小于变为大于或等于(不确定是否可以做到这一点,但值得考虑(。

最新更新