Cplex c ++多维决策变量 [英] Cplex c++ multidimensional decision variable
问题描述
我是新的使用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。 x [i] [k] + x [i] [k] => 2 * p [k] + x [i] [k] ;);
}}
循环应该这样:
x [1] [1] + x [2] [1] + x [3] [1] + x [4] [1] + x [5] * p [1];
x [1] [2] + x [2] [2] + x [3] [2] + x [4] 2] + x [5] [2] => 2 * p [2];
x [1] x [3] [3] + x [4] [3] + x [5] [3] => 2 * p [3];
] [4] + x [2] [4] + x [3] [4] + x [4] [4] + x [5] [4]
有没有人有想法?
$ b
但是我离这个结果很远。 b $ b
感谢
您可能想要使用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到大小-1,而不是1到大小。您的目标应该是
model.add(IloMaximize(env,1000 * p [0] + 2000 * p [1] + 500 * p [2] + 1500 * p [3]));
I'm new using cplex and I try to find some information on internet but didn't find clear stuff to help me in my problem.
I have P[k] k will be equal to 1 to 4
and I have a decision variable x[i][k] must be equal to 0 or 1 (also p[k])
the i is between 1 to 5
For now I do like this
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]; );
}}
The loop should do something like this:
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];
but I'm far away from this result.
Does anyone have an idea?
Thanks
You probably want to use an 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]; );
}
You also need to declare x as a 2-dimensional array.
IloArray x(env, 4);
for (int k = 0; k < 4; ++k)
x[k] = IloIntVarArray(env, 5, 0, 1);
Also, in c++, array indices are from 0 to size-1, not 1 to size. Your objective should be written
model.add(IloMaximize(env, 1000 * p[0] + 2000 * p[1] + 500 * p[2] + 1500 * p[3]));
这篇关于Cplex c ++多维决策变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!