2015-01-08 94 views
0

我有一個合成的目標函數來解決問題(p)的拉格朗日鬆弛。拉格朗日鬆弛Cplex&Java

目標函數的數學公式是:

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); 

謝謝您的幫助。

回答

1

您的代碼中存在多處錯誤。

我在這裏假設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]); 

由於方法不改變自己的投入,但返回的結果。

試着改變你的錯誤,如果你仍然有問題。嘗試發佈更完整的代碼片段。

希望這會有所幫助