微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OR-TOOLS Google如何告诉求解器在达到特定结果时停止运行

如何解决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时停止?

解决方法

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

不执行您期望的操作。 resolver.Objective()是MPObjective类型的类。调用Value()进行检查是否已找到解决方案,如果不是这样,则返回0。

因此,实际上,您正在执行:

solver.Add(0 >= 0)

这是没有操作的。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。