我是 cplex 的新手,我尝试在互联网上查找一些信息,但没有找到明确的内容来帮助我解决问题。
我有 P[k] k 将等于 1 到 4
我有一个决策变量 x[i][k] 必须等于 0 或 1(也是 p[k])
i 介于 1 到 5 之间
现在我确实喜欢这个
IloEnv env;
IloModel model(env);
IloNumVarArray p(env);
p.add(IloNumVar(env, 0, 1));
p.add(IloNumVar(env, 0, 1));
p.add(IloNumVar(env, 0, 1));
IloIntVar x(env, 0, 1);
model.add(IloMaximize(env, 1000 * p[1] + 2000 * p[2] + 500 * p[3] + 1500 * p[4]));
for(int k = 1; k <= 4; k++){
for(int i = 1; i <= 5; i++){
model.add(x[i][k] + x[i][k] + x[i][k] + x[i][k] + x[i][k] => 2 * p[k]; );
}}
循环应该执行如下操作:
x[1][1] + x[2][1] + x[3][1] + x[4][1] + x[5][1] => 2 * p[1] ;
x[1][2] + x[2][2] + x[3][2] + x[4][2] + x[5][2] => 2 * p[2] ;
x[1][3] + x[2][3] + x[3][3] + x[4][3] + x[5][3] => 2 * p[3] ;
x[1][4] + x[2][4] + x[3][4] + x[4][4] + x[5][4] => 3 * p[4] ;
但我离这个结果还很远。
有人有想法吗?
谢谢
最佳答案
您可能想使用 IloNumExpr
for(int k = 0; k < 4; k++){
IloNumExpr sum_over_i(env);
for(int i = 0; i < 5; i++){
sum_over_i += x[i][k];
}
model.add(sum_over_i >= 2 * p[k]; );
}
您还需要将 x 声明为二维数组。
IloArray x(env, 4);
for (int k = 0; k < 4; ++k)
x[k] = IloIntVarArray(env, 5, 0, 1);
此外,在 C++ 中,数组索引是从 0 到 size-1,而不是 1 到 size。应写下您的目标
model.add(IloMaximize(env, 1000 * p[0] + 2000 * p[1] + 500 * p[2] + 1500 * p[3]));
关于c++ - Cplex C++多维决策变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495805/