c++ - 如何检查 CPLEX C++ 中是否已存在约束?

标签 c++ linear-programming cplex

我有一些 Sizes[i1] + Sizes[i2] + Sizes[i3]<=1 形式的约束,我通过添加

model.add(Sizes[i1] + Sizes[i2] + Sizes[i3]<=1)

对于一些特定的索引 i1、i2、i3。稍后我想为所有其他索引组合添加约束

model.add(Sizes[k1] + Sizes[k2] + Sizes[k3]>1)

有什么好的方法可以做到这一点,例如检查约束是否已经存在于模型中?

也许我可以存储由 IloModel::add 函数返回的句柄(例如作为 ILOExtracableArray 或什至 IloConstraintArray?)但即便如此我也不知道如何检查约束是否已经存在。 谢谢

最佳答案

我不认为真的有一种简单的方法可以从复杂模型中恢复它。我以前在几个项目中不得不做类似的事情,所以我在下面给出我的两个建议。

(1) 如果您知道在每个约束中总是有相同数量的事物,那么您可以创建一个结构来保存该信息,例如:

    class tuple{
      public int index1;
      public int index2;
      public int index3;
    }

然后您可以为您添加的每个约束创建一个,并将它们保存在列表或数组或类似内容中。

(2) 如果您知道索引的可能值,那么也许您可以从索引中创建哈希码或类似代码。如果做得好,这也可以解决由于排列索引而导致的对称性问题 - (Sizes[a] + Sizes[b] + Sizes[c]) 与 (Sizes[b] + Sizes[a] + Sizes [c]).

然后如上所述,您可以将哈希码保存在列表或数组中以用于您添加的约束。

关于c++ - 如何检查 CPLEX C++ 中是否已存在约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307909/

相关文章:

c++ - 当我们定义模板时总是定义 `value_type` 是一个好习惯吗

python - Gurobi模型修改慢,可以直接修改约束矩阵吗?

python - 使用 PuLP 进行线性规划沙拉混合物优化

mysql - 将 CPLEX OPL 模型与 MySQL DB 连接

CPLEX 无法求解 Gurobi 可以求解的 .lp 文件

c++ - 继承和多态性——易用性与纯粹性

c++ - 在 C++ 中使用完全限定名称

c++ - 与零进行比较是否比与任何其他数字进行比较更快?

python - Scipy 用更复杂的函数优化 linprog

visual-studio-2015 - CPLEX 12.8,Visual Studio 2015错误: Cannot open include file