![](/img/trans.png)
[英]Python: Constraint to normalize weights, such that no weight is greater than 1/sqrt(n)
[英]Constraint error with greater than operator
我曾经在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之间使用>。
如对您的答案的评论之一所述,线性规划理论不支持严格的不等式。 但是,由于您知道表达式的两边都是整数,
a > b
相当于
a >= b + 1
后者不需要严格的不平等。 这样重写约束应该起作用。
蒂姆(Tim)的评论实际上是一个完全正确的答案:“您不能在线性编程和类似MILP的相关变体中使用严格的不等式。这是因为约束定义了可能解的空间,并且必须在其边界边缘和曲面上包括点一整套可行的解决方案。请检查几乎所有有关LP和MILP的基本文字。”
使用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]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.