c++ - Cplex C++多维决策变量

标签 c++ variables cplex

我是 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/

相关文章:

c++ - 有效地 const_cast-ing 常量引用参数

file - gnuplot : how to save datafile values into a variable (with condition)?

javascript - 在 JavaScript 循环中声明相同的变量名

c++ - 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?

c++ - 到第一个可行解的 CPLEX 时间

r - R 中的快速非负分位数和 Huber 回归

c++ - c++什么时候实例化方法?

C++ access_once

外部 dll 中的 c#/wpf OpenMP

Javascript 变量未在另一个 javascript 中呈现