解决方案为 CPLEX 中的 dvar float+ 提供负值

Solution gives a negative value for dvar float+ in CPLEX

我的变量 returns 的解是一个负值,而我将它定义为 dvar flaot+,这怎么可能? 这是我的代码:

int fixed_cost = 75;
dvar int+ x[truck, order] in 0..1;
dvar int+ savings[truck];
...
forall(h in truck) sum(n in order) (x_[h,n])*fixed_cost- fixed_cost == savings[h];

解决方案显示如下:

savings = [-75, 75];

虽然我需要以下内容:

savings = [0, 75];

我也尝试了以下方法,但我的 OPL 不会 运行:

forall(h in truck) savings[h] >= 0;

有人可以帮助我吗?提前致谢!

在 OPL CPLEX 中,当模型不可行时,您会得到放松。

例如:

dvar int+ x;
dvar int+ y;

subject to
{
  x==5;
  x+y==0;
}

将在 IDE 中给出 y==-5。

放宽 y 应为正的限制。

参见 IDE 和 OPL > CPLEX Studio IDE > IDE 教程 > 松弛不可行模型 > CPLEX 文档中松弛和冲突搜索的工作原理。