or-tools - Or-tools cp_sat求解器结果不一致
问题描述
我有一个优化问题,我正在使用 or-tools cp_sat 求解器。变量的数量约为 3500(都是布尔值),但约束的数量很大(~750000)。在 3500 个变量中,约 3000 个直接依赖于其他 500 个变量。我测试了 2 个场景:
- 有一个简单的目标函数,取决于约 3000 个约束变量。
- 具有取决于 ~3000*3000 个新变量的复杂目标函数,其中每个新变量是 (1) 中变量的成对逻辑与。
对于每种情况,我们为求解器提供约 500 个变量的提示。
对于 1,它无法在合理的时间内找到最优解。运行大约 30-45 分钟后,目标函数的改进可以忽略不计,但解决方案令人满意。
对于 2,行为很奇怪。大约一半的时间,它声称问题是不可行的,一半的时间,声称它找到了最佳解决方案,但只返回提示暗示的解决方案。只有很少(少于百分之几的运行),它会进行一些优化并返回 FEASIBLE。
此外,案例 1 使用大约 4-6 GB 内存,但案例 2 使用 100-120 GB 内存。
案例 2 中的行为是预期的吗?我应该如何进行调试?
解决方案
对于案例2,问题变得非常大。您正在创建 9M 布尔变量。
你在使用多线程吗?
你可以尝试减小模型的大小,看看这是否仍然是片状的?
问题的产生是确定性的吗?
你用的是大系数吗?您是否可能遇到整数溢出错误?
谢谢
推荐阅读
- c - 从内存中运行 DOS 中的可执行文件
- reactjs - React-Google-Maps API:如何在当前位置搜索搜索结果?
- sql - SQL - 向 SELECT 添加条件
- css - 我希望能够用不同的颜色为一条路径着色
- javascript - 无法将对象转换为原始值(discord.js)
- javascript - 如何从 javascript 函数中提取数据?
- pytorch - 在单个 GPU 上运行两个不同的独立 PyTorch 程序
- regex - 用于转换的 Grafana 正则表达式
- c# - 如何通过 Microsoft.Exchange.WebServices 获取 GAL id 并使用 FindPeople
- python - 使用符号解决问题:*:“符号”和“平等”不支持的操作数类型