gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:43:41 25 4
gpt4 key购买 nike

我有一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com