2015-07-21 30 views
2

我正在使用Java中的CPLEX解決線性編程問題。我有一個二進制決策變量定義爲CPLEX java - 多維數組的等式約束

IloNumVar[] xd = new IloNumVar[Tend]; 

其中趨勢是時間。決策變量是受該過XD的時間之和必須等於給定整數C_D,這是實現約束:

cplex.addEq(cplex.sum(xd), C_d); 

到目前爲止,一切工作。

我遇到的問題是,現在我想用一個多維數組來概括決策變量的數目:

IloNumVar[][] xd = new IloNumVar[Tend][count_d]; 

,但我仍然需要加以約束每一個決策變量在總和時間必須等於一個常數。我試着用這樣的:

IloNumVar[] Sum_d = new IloNumVar[Tend]; 
IloNumVar[] Sum_D = new IloNumVar[1]; 
for(int j=0;j<count_d;j++){ 
    for (int i = 1; i<Tend; i++){ 
     cplex.addEq(Sum_d[i],cplex.sum(Sum_d[i-1],xd[i][j])); 
     } 
    cplex.addEq(Sum_d[Tend],Sum_D); 
    cplex.addEq(Sum_D,C_d); 
    } 

,但我得到了以下錯誤: 多個標記在該行

  • 方法ADDEQ(IloNumExpr,雙)在類型IloCplexModeler是不適用的參數( IloNumVar,IloNumVar [])
  • 方法ADDEQ(IloNumExpr,雙)在類型IloCplexModeler不適用於參數(IloNumVar [],INT)

我不太確定什麼是在問題定義中包含等價約束的正確方法。

任何建議將不勝感激。

回答

1

錯誤是由於不尊重addEq過載。

addEqfunction的所有六個過載中,您添加到模型中的公式的RHS是一個整數。它始終是double或另一個IloNumExpr

因此,您只需要聲明:

double C_d

一個很高興成爲服務!