答案不符合约束

时间:2019-09-18 16:19:01

标签: opl

我在opl中应用了有关车辆路线选择的MILP。 一个重要的约束条件是,每次旅行最多只能由一辆车辆服务一次。 (每次旅行都可以从中获利) 因此,我希望opl可以最大限度地提高总利润,并向我显示提供哪些旅行。 但是,结果表明,所有车辆都可以进行某些行程。 所以我认为代码有问题。

我尝试了多种写约束的方法(例如,从“针对所有人”的括号中删除“ k中的k”),但是结果是相同的。

[模型文件]

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

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

/ *参数* /

float Pj [J] = ...; //满足修改后的租金请求j

/ *决策变量的表达* / dexpr浮点利润= sum(j中的j,k中的k)Pj [j] * x [j] [k];

/ 目标函数 /

最大化利润;

/ 约束 /

约束ct1 [J] [K];

受{

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

}

        // end subject to. 

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

执行printOutput {     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")   
            }   

        }

}

1 个答案:

答案 0 :(得分:0)

我猜想约束ct1是宽松的,因为它很软。 CPLEX将在需要时放宽软约束

如果您转动

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

进入

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

然后约束会变得很困难。