我希望有一个人可以帮助我。我在 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。让我们说 k 个向量,每个向量都有 b 个元素。我引入了另一个变量 pbk[b][k],其中 k 给出了向量的数量。不幸的是,cplex 返回 k 次相同的向量。我还在 Gurobi 中实现了相同的模型,它返回 k 个不同的向量。
有谁知道如何在 cplex 中获得不同的向量?
谢谢!