誰かが私を助けてくれることを願っています。cplex studio で次の最大化問題を実装しました。
//Parameter
`int n=...;` //number of items
`int c=...;` //number of bundles
`int k=...;` //number of price vectors
`int m =...;` //number of bidders
range range_M =1..m;
range range_N =1..n;
range range_B =1..c;
range range_K =1..k;
float vj [range_B][range_M]=...; //Wert von Bündel b
float s [range_B]=...;
//Adjazenzmatrix
int a[range_B][range_N]=...;
//Variablen
dvar boolean x[range_B];
dvar float+ pbk[range_B][range_K];
dvar float+ pb[range_B];
dvar float+ pik[range_N][range_K];
dvar float+ pi[range_N];
dvar float v[range_B];
//Zielfunktion
maximize sum (b in range_B) (v[b]*x[b]);
//Restriktionen
subject to {
//Values OR
forall (b in range_B) v[b]==max(j in range_M) vj[b][j];
//Jedes Item kann nur einmal zugeordnet werden
forall (i in range_N) sum (b in range_B) a[b][i]*x[b]<=1;
//Preise sind nicht negativ
forall (i in range_N) pi[i]>=0;
forall (b in range_B) pb[b]>=0;
forall (i in range_N) pik[i][k]>=0;
forall (b in range_B) pbk[b][k]>=0;
//supporting Preise pbk
forall (b in range_B, k in range_K) pbk[b][k]<= v[b] +10000*(1-x[b]);
forall (b in range_B, k in range_K) pbk[b][k]>= v[b]-10000*x[b];
//unsold items
forall (i in range_N) pi[i]<=10000*sum(b in range_B)x[b]*a[b][i];
//Lineare Preisvektoren
forall (b in range_B, k in range_K) sum (i in range_N) pik[i][k]*a[b][i]==pbk[b][k];
//Bündel mit nur einem Item
forall (b in range_B: s[b]==1, i in range_N: a[b][i]==1) pi[i]==pb[b];
//pb Auswahl
f
orall (b in range_B) pb[b]<= max (k in range_K) pbk [b][k] + 10000*(1-x[b]);
forall (b in range_B) pb[b]>= min (k in range_K) pbk [b][k] - 10000*x[b];
forall (b in range_B) pb[b]<= min (k in range_K) pbk [b][k] + 10000*x[b];
forall (b in range_B) pb[b]>= max (k in range_K) pbk [b][k] - 10000*(1-x[b]);
}
今、複数のベクトル pb を取得したいと考えています。それぞれ b 個の要素を持つ k 個のベクトルを考えてみましょう。別の変数 pbk[b][k] を導入しました。k はベクトルの数を示します。残念ながら、cplex は同じベクトルの k 回を返します。k 個の異なるベクトルを返す同じモデルを Gurobi にも実装しました。
cplexでも異なるベクトルを取得する方法を知っている人はいますか?
ありがとうございました!