2014-12-24 63 views
1

我是新來的世界cp優化器,這開始做小測試。我有以下問題,我需要你的幫助。這是我的代碼:我該如何制定限制?

數據

const IloInt nbPair = 6; 
const IloInt nbPairElements = 15; 
const IloInt nbElement = 2; 
IloIntVarArray SolPair(env, nbPair,0,1); 

IloIntArray PairCost(env, nbPair,100,150,200,300,350,133); 

IloIntArray2 PairElements(env, nbPairElements); 
PairElements[0] = IloIntArray(env, nbElement, 0,1); 
PairElements[1] = IloIntArray(env, nbElement, 0,2); 
PairElements[2] = IloIntArray(env, nbElement, 1,1); 
PairElements[3] = IloIntArray(env, nbElement, 1,2); 
PairElements[4] = IloIntArray(env, nbElement, 1,3); 
PairElements[5] = IloIntArray(env, nbElement, 2,3); 
PairElements[6] = IloIntArray(env, nbElement, 2,4); 
PairElements[7] = IloIntArray(env, nbElement, 2,5); 
PairElements[8] = IloIntArray(env, nbElement, 3,1); 
PairElements[9] = IloIntArray(env, nbElement, 3,2); 
PairElements[10] = IloIntArray(env, nbElement, 3,3); 
PairElements[11] = IloIntArray(env, nbElement, 4,2); 
PairElements[12] = IloIntArray(env, nbElement, 5,2); 
PairElements[13] = IloIntArray(env, nbElement, 5,4); 
PairElements[14] = IloIntArray(env, nbElement, 5,5); 



// build model 



//Objective 
IloExpr Obj_Func_1(env); 
for (int i = 0; i < nbPair; ++i) 
    { 
      Obj_Func_1 += PairCost[i] * SolPair[i]; 
    } 
model.add(IloMinimize(env, Obj_Func_1)); 
Obj_Func_1.end(); 
IloCP cp(model); 

.....

PairElements是元組[相提並論,元素]和需要得到的夫婦有下列限制最低的成本: :

- There should be a single time all elements. 

我不知道如何創建限制


結果是:

杆數:0和2

,因爲兩對包含所有元素,便可以在更低的成本來表示

非常感謝你 胡安·卡洛斯·

+0

請問,有人可以幫助我嗎? –

回答

0
  • 應該有一次性所有元素。

我不明白你的問題。

要添加的約束,你可以嘗試建立一個表達這樣的:

IloLinearIntExpr expr = this.model.linearIntExpr(); 
for (int j = 0; j < this.dim; j++) { 
    if (i != j) { 
     expr.addTerm(1, this.xVars[i][j]); 
    } 
} 
this.model.addEq(expr, 1); 

xVars表示如果你想要一個不等式model.boolVar("X0101")

初始化IloIntVar的陣列,只是將其添加this.model.addLe(expr,1);

希望能幫到你。否則,嘗試更好地解釋你的問題