如何有效地将CP求解器时间限制与求解回调结合起来

问题描述 投票:0回答:1

我想配置

ortools
CP_Solver

求解器定义如下:

from ortools.sat.python import cp_model
solver = cp_model.CpSolver()

这样:

  • 首先,跑向
    time_limit_1
    。如果找到解决方案,则返回最佳解决方案。
  • 如果没有找到解决方案,请继续,直到满足任一条件: (a) 找到解决方案 (b) 在没有解的情况下达到
    time_limit_2

我目前的方法效率极低。

首先,我设置

solver.parameters.max_time_in_seconds = time_limit_1
一旦达到极限而无解,我的求解器就会再次从头开始。这次它使用
stop_after_first_solution
参数在找到的第一个解决方案处中断。

有没有办法从第一次搜索结束的地方开始第二次搜索?

python or-tools cp-sat
1个回答
0
投票

只需设置 limit1 + limit2 的时间限制即可。

然后添加一个solution_callback,如果在limit1之后找到解决方案,该回调将中止。

© www.soinside.com 2019 - 2024. All rights reserved.