我是世界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是元组[Par,element],需要以最低成本获得这对夫妇,并具有以下限制::
- 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)
;
希望能帮到你。否则,试着更好地解释一下你的问题