首页 > 解决方案 > OR-TOOLS google 如何告诉求解器在达到某个结果时停止

问题描述

我有一个简单的 3d 分配问题。我为成本矩阵随机生成 0 到 100 之间的整数。

我注意到,当问题的大小足够大时,比如 40 个分配。(40X40X40 成本矩阵)。总成本达到 0。这是有道理的。

随着矩阵变大,我认为有更多方法可以达到预期的结果,并且我不希望求解时间成倍增加。但是id可以。

我认为这是因为算法不满足于零结果,直到它绝对确定它是最优的。

我的问题是有没有办法告诉求解器在达到一定的总成本时停止?我在文档中没有找到该选项

当我试图限制时间

solver.SetTimeLimit(TIME)

求解器根本找不到解决方案。

我尝试添加答案之一中建议的约束(总成本> = 0),但没有效果。

为 20X20X20 问题添加以下行时

solver.Add(solver.Objective().Value() >= 1)

求解器找不到解决方案,但添加时

solver.Add(solver.Objective().Value() >= 0)

它找到了一个总成本为 4 的解决方案,为什么它不能找到具有第一个约束的相同解决方案?

以及如何告诉它在达到 0 时停止?

标签: pythonor-tools

解决方案


 solver.Add(solver.Objective().Value() >= 0)

不符合您的预期。solver.Objective() 是 MPObjective 类型的一个类。调用 Value() 检查是否找到了解决方案,如果不是,则返回 0。

所以在实践中,你正在执行:

solver.Add(0 >= 0)

这是一个禁止操作。

为了限制目标,您应该创建一个new_var从 0 到 的整数变量sum(cost_coefficients),然后添加new_var = sum(cost_coefficients * bool_vars),最后最小化new_var


推荐阅读