答案不符合约束条件
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;
那么约束会变硬。
我正在 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;
那么约束会变硬。