c++ - 如何将条件约束转换为 cplex 的 Concert C++?

标签 c++ linear-programming cplex

我使用 OPL for Linear Programming 使用 IBM ILOG Cplex optimization Studio 编写了一个模型。但现在我需要使用 Concert C++ 编写相同的模型。但是我无法转换我的约束。

我的约束之一如下:

forall(i in Nodes)
           edgeSum[i]:                
              if(i==0)
                sum (j in Ein[0])x[<j,i>] - sum (j in Eout[0])x[<i,j>] == -1;
              else if (i>=1 && i<n/2)
                sum (j in Ein[i])x[<j,i>] - sum (j in Eout[i])x[<i,j>] == 0;     
             else 
               sum (j in Ein[i])x[<j,i>] <= 1;

特别是我需要知道如何编写条件约束。 感谢您的提前。

最佳答案

尝试类似的东西

for (i=0; i<numNodes; i++)
{
  if (i == 0)
  {
    IloExpr expr1(env);
    for (j=0; j<numIn[0]; j++)
      expr1 += x[EInIndex[0][j]];
    IloExpr expr2(env);
      expr2 += x[EOutIndex[0][j]];
    model.add(expr1 - expr2 == -1);
  }
  else if ((i >= 1) && (i < n/2))
  {
    // etc
  }
  else
  {
   // etc
  }
}

我只是凭内存做的,所以语法可能有点困惑,而且我没有填写所有案例的所有细节——它们应该可以用类似的结构来完成。我也可能破坏了你的索引——不确定你是如何在你的 C++ 代码中 reshape 你的切片方法的,所以我根据我之前所做的做了一些猜测。我也没有命名约束 - 也可以很容易地添加。查看 CPLEX 提供的一些 C++ 示例。

希望对您有所帮助

关于c++ - 如何将条件约束转换为 cplex 的 Concert C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044428/

相关文章:

mathematical-optimization - 线性规划 - 双单纯形变量的含义?

c++ - 如何使cplex不输出到终端

c++ - 在 CPLEX 中指定约束的含义

c++ - 不同数组声明的类型

c++ - 错误 C2275 RHandle : illegal use of this type as an expression

c++ - char数组字符串混淆

c++ - 在 C++ 中编写复制构造函数和赋值运算符的 list

integer - 寻找 "simple"整数线性规划源代码/伪代码

c++ - 命名二维变量 CPLEX Concert Technology C++

python - 使用 Cplex 在 Python 中构建线性程序