Python 设定CP-SAT解算器的种子

Python 设定CP-SAT解算器的种子,python,or-tools,cp-sat-solver,Python,Or Tools,Cp Sat Solver,在谷歌或工具库中,“原始”CP解算器(此处讨论:)可以使用.ReSeed()重新设定种子。但是,较新版本的CP-SAT不能 我的假设是,CP-SAT将彻底尝试您问题中的每一个选项,从可行的选项中选择最大值或最小值(取决于您的优化目标)。因为它会尝试所有这些,所以不需要种子设定,因此该选项对您不可用 这种理解正确吗?如果是,为什么原始解算器有种子?如果我不正确,新CpSolver中缺少.ReSeed()是否是一个疏忽?不,你的推理不太正确 是的,CP-SAT解算器将尝试所有选项,并在有限时间内找到

在谷歌或工具库中,“原始”CP解算器(此处讨论:)可以使用
.ReSeed()
重新设定种子。但是,较新版本的CP-SAT不能

我的假设是,CP-SAT将彻底尝试您问题中的每一个选项,从可行的选项中选择最大值或最小值(取决于您的优化目标)。因为它会尝试所有这些,所以不需要种子设定,因此该选项对您不可用


这种理解正确吗?如果是,为什么原始解算器有种子?如果我不正确,新CpSolver中缺少
.ReSeed()
是否是一个疏忽?

不,你的推理不太正确

是的,CP-SAT解算器将尝试所有选项,并在有限时间内找到解决方案或证明不可行(在某些温和条件下:我不会尝试深入讨论细节,只提及最简单的限制->内存;不太简单:随机重新启动进程)。解算器的这种性质通常被称为完全和(声音)(后者指的是,在可行的情况下,永远不会出现错误分类的输出,如不可行性)。 但是原始的CP解算器也是完整和可靠的

种子设定不应该用作调优参数(而且用例非常有限)。种子被用作-init(解算器中存在随机性,但它是确定性的),在比赛中使用这一事实可能是有意义的(以显示运气或无帮助的调整)

正如@Stradivari在评论中所提到的,在这个过程中有一个种子。如果你想的话,这些也可以设置

可能是这样的:

from ortools.sat.python import cp_model

solver = cp_model.CpSolver()
solver.parameters.random_seed = 10
这显示了python接口,但是protobuf文件是为所有支持的语言编译的,因此这些setter应该在所有api(imho)中都可用

如果我没记错的话,手动设置的参数将在解算开始时显示给您(或者可以通过某种方式获取此信息以进行其他检查)。

github的一个相关问题: