【发布时间】:2020-06-12 08:37:32
【问题描述】:
我在 minizinc 中内置了一个简单的非线性代码,如下所示。
array[1..3] of var 1..10:x;
array[1..3] of var 10.0..20.0:y;
var float:z;
constraint sum(i in 1..3)(x[i]*y[i])=z;
solve minimize z;
如果我在 minizinc 后台使用 Cplex 求解器,我会遇到 Float_times 错误。
unable to create linear formulation for the `float_times` constraint. This model instance cannot be solved using a linear solver.
如果我将相同的代码转换为 OPL 并在 IBM ILOG Cplex IDE 中使用它们,它会提供答案。示例代码如下。
dvar int x[ 1..3] in 1..10;
dvar float y[ 1..3] in 10.0..20.0;
dvar float z;
minimize z;
subject to {
cons1:
sum(i in 1..3)x[i]*y[i]==z;
}
您能否解释一下为什么会发生这种情况,即使我在两个后端都使用了相同的求解器。
【问题讨论】:
-
我可以从 minizinc IDE 处理上述 minizinc 代码的最佳求解器是什么。
-
您可以尝试使用支持
float_times的CP求解器,例如Gecode、JaCoP 或 OptiMathSAT。我不确定哪些 MIP 求解器支持float_times。显然,CPLEX 没有。也许是古罗比?