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 はタプル [Par, element] であり、次の制限で最低コストのカップルを取得する必要があります::

- There should be a single time all elements.

制限の作成方法がわからない


結果は次のとおりです。

パー: 0 と 2。

2 つのペアにはすべての要素が一度に含まれ、低コストで表されるため

どうもありがとう フアン・カルロス

4

1 に答える 1

0
  • すべての要素が 1 回だけ存在する必要があります。

あなたの質問がわかりません。

制約を追加するには、次のような式を設定してみてください。

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

で初期化されたIloIntVarxVarsの配列を示します。model.boolVar("X0101")

不等式が必要な場合は、this.model.addLe(expr,1);を追加するだけです。

お役に立てば幸いです。それ以外の場合は、質問をもう少し詳しく説明してください

于 2015-05-04T16:13:20.703 に答える