答案不符合约束条件

The answer doesn't meet the constraints

我正在 opl 中应用关于车辆路径的 MILP。 一个重要的约束是,每次行程最多只能由一辆车提供一次服务。 (每次旅行都有服务它的利润) 所以我希望 opl 最大化总利润并向我展示提供了哪些行程。 但是,结果显示某些行程由所有车辆提供服务。 所以我认为代码有问题。

我尝试了不同的方式来编写我的约束,(例如,从 "for all" 括号中删除 "k in K"),但结果是一样的。

[模型文件]

{int}J=...; // 行程请求

{int}K=...; // 汽车

/*参数*/

浮动 Pj[J]=...; // 通过完成修改后的租赁请求获得的利润 j

/* 描述变量的表达 */ dexpr float profit = sum(j in J, k in K) Pj[j]*x[j][k];

/Objective函数/

利润最大化;

/约束/

约束ct1 [J][K];

受制于{

forall (j in J, k in K)
  ct1 [j][k]: sum(i in J) x[i][k] <= 1;

}

        // end subject to. 

/* +++ 打印输出 +++ 打印输出 +++ 打印输出 +++ */

执行打印输出{ writeln();

write("profit= ", profit);

 writeln();     //number of trips j served 
write("number of trips served = ")
for (var j in J){
     for(var k in K){
            write( x[j][k], "\t")   
            }   

        }

}

我想约束 ct1 是松弛的,因为它是软的。 如果需要,CPLEX 将放宽软约束

如果你转

ct1 [j][k]: sum(i in J) x[i][k] <= 1;

进入

sum(i in J) x[i][k] <= 1;

那么约束会变硬。