我曾经在Cplex遇到麻烦,不知道为什么。 因此,我附上了一段代码:
dvar int+ soglia[pazienti][giorni][slot];
dvar int+ sogliar[pazienti][giorni][slot];
dvar int+ soglial[pazienti][giorni][slot];
forall(k in giornidue, w in slot) sum(j in pazienti)(soglia[j,k,w]+sogliar[j,k,w]+soglial[j,k,w]) > sum(j in pazienti)(soglia[j,k-1,w]+sogliar[j,k-1,w]+soglial[j,k-1,w]);
并得到此错误:
Function operator >(dexpr int, dexpr int) not available in CPLEX context
我不明白为什么我不能在int之间使用>。
答案 0 :(得分:2)
如对您的答案的评论之一所述,线性规划理论不支持严格的不等式。但是,由于您知道表达式的两边都是整数,所以
a > b
等同于
a >= b + 1
后者不需要严格的不等式。像这样重写约束应该起作用。
答案 1 :(得分:0)
Tim的评论实际上是一个完全正确的答案:“您不能在线性编程和类似MILP的相关变体中使用严格的不等式。这是因为约束条件定义了可能的解决方案的空间,并且必须在其边界边上包括点,并且在一组可行的解决方案中进行搜索。请检查几乎所有有关LP和MILP的基本文字。”
答案 2 :(得分:0)
使用CPLEX的任何建模API,您将无法在变量之间进行严格的不等式。
您应该使用ˋ<=ˋ
以下内容将消除此错误
range pazienti = 1..10;
range giorni = 1..10;
range giornidue = 2..10;
range slot = 1..10;
dvar int+ soglia[pazienti][giorni][slot];
dvar int+ sogliar[pazienti][giorni][slot];
dvar int+ soglial[pazienti][giorni][slot];
subject to {
forall (k in giornidue, w in slot)
sum(j in pazienti)(soglia[j,k,w]+sogliar[j,k,w]+soglial[j,k,w]) >=
sum(j in pazienti)(soglia[j,k-1,w]+sogliar[j,k-1,w]+soglial[j,k-1,w]);
}