首页 > 解决方案 > 如何使用严格的不等式比较浮点变量?

问题描述

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

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
        );
    }
}

标签: optimizationcplex

解决方案


正如蒂姆在他的评论中提到的,你应该使用var >= value + epsilon. 严格不等式不适合 CPLEX 使用的线性规划范式。


推荐阅读