如何使用严格的不等式比较浮点变量?

时间:2019-04-09 14:38:14

标签: optimization cplex

我正在尝试实现最大化问题。在一部分中,我试图将浮点数与dvar浮点数进行比较,为此我得到错误“在CPLEX上下文中,运算符>(float,dvar float)不可用”。使用> =可以,但是我得到错误的结果。有什么办法可以解决该错误?

float price[D][A] = ...;
float volaforecast[D] = ...;
dvar float vola;
dvar int change[D][A];

maximize sum(d in D, a in A)(price[d][a] * change[d][a]);

subject to {
    forall(d in D: d > 1) {
        ( volaforecast[d] <= vola && 
          volaforecast[d-1] > vola && 
          change[d]["a"] == 0
        ) || (
          volaforecast[d] > vola && 
          volaforecast[d-1] <= vola && 
          change[d]["a"] == 1
        );
    }
}

1 个答案:

答案 0 :(得分:0)

正如Tim在其评论中所述,您应该使用var >= value + epsilon。严格的不等式不适合CPLEX使用的线性编程范例。