java / cplex约束的线性化

时间:2015-10-18 03:38:08

标签: java cplex linearization

我有一个约束,我需要在我的java / cplex程序中加入。约束是:

(forall q: x[i][j][q][k])(t[i][k]+s[i]+distance[i][j]-t[j][k]) <= 0        forall k, i, j

如果我这样说,我得到cplex 5002(不是正半正定)错误,因为配方不是线性的。我做了以下操作来线性化约束并避免问题:

for(int k=0; k<Ausführung.k; k++){
for(int i=1; i<grossI.length; i++){
    for(int j=1; j<grossJ.length; j++){
        //for(int q=1; q<grossQ.length; q++){
        IloLinearNumExpr sumLastTerm = model.linearNumExpr();
        for(int q=1; q<grossQ.length; q++){
            sumLastTerm.addTerm(-1.0,  w[i][j][q][k]);
        }   
        IloConstraint con = model.addLe(model.sum(model.prod(-2000, sumLastTerm), model.sum(t[i][k], model.sum(Data.service[i], model.sum(distance[i][j], model.prod(-1.0, t[j][k]))))), 0); 
        con.setName("NB (9.7)."+k + i);
    }
}
}

现在,我得到一个&#34; Row&#39; NB(9.7).01&#39;不可行,所有条目都是隐含的边界。&#34;错误信息。我告诉我,错误在于这个约束,就在开始迭代它时。任何人都可以告诉我我的错误在哪里或以其他方式确认它必须在其他地方吗?

1 个答案:

答案 0 :(得分:0)

好吧,问题是我忘了在不平等的第一个任期内中和“1”。因此它应该是:

-2000(1-w[i][j][q][k]) +t[i][j]+s[i]+d[i][j]-t[i][k] <= 0

由于第一项中缺少“1”,因此w [i] [j] [q] [k] == 1的情况下,不等式的左边部分未被中和。