我有一个组合的目标函数来解决问题的拉格朗日松弛(p)。

目标函数的数学公式为:

Minimize [sum(i in n) time[i] * poids[i] + sum (i in n) Mult[i]* ((sum (j in n) x[i][j]) -1).


我尝试了以下操作,但不起作用:

    // objective
    IloNumExpr expr1 = null;
    IloLinearNumExpr obj = cplex1.linearNumExpr();

    for (int i =0; i<n; i++) {
        obj.addTerm(time[i],W[i]);
    }


    for(int i=0; i<n; i++){
        IloLinearNumExpr expr = cplex1.linearNumExpr();
        for (int j=0; j<n; j++){
            if (cplex1.equals(x[i][j])){
                expr.addTerm(1,x[i][j]);
            }
        }  cplex1.sum(expr,-1);
           cplex1.prod(expr, mult[i]);

         obj.add(expr);
    }

    cplex1.addMinimize(obj);


感谢您的帮助。

最佳答案

您的代码中存在多个错误。

我在这里假设cplex1是一个IloCplex类型变量。

话虽如此,你有

for (int j=0; j<n; j++){
            if (cplex1.equals(x[i][j])){
                expr.addTerm(1,x[i][j]);
            }
        }  cplex1.sum(expr,-1);
           cplex1.prod(expr, mult[i]);


这有两个错误。第一

if (cplex1.equals(x[i][j])){


您正在将IloCplex与数字变量进行比较。这将始终返回false。您想在这里完成什么?

第二个错误是

cplex1.sum(expr,-1);
cplex1.prod(expr, mult[i]);


应该是这个

expr = cplex1.sum(expr,-1);
expr = cplex1.prod(expr, mult[i]);


由于这些方法不会更改其输入,而是返回结果。

如果您仍然遇到问题,请尝试更改您的错误。尝试发布更完整的代码段。

希望这可以帮助

关于java - 拉格朗日松弛Cplex和Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27843663/

10-11 04:39