2014-12-24 28 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);

希望能帮到你。否则,尝试更好地解释你的问题