当解决方案足够好时停止?
Stopping when the solution is good enough?
我成功实现了满足我需求的求解器。但是,我需要 运行 解决 1500 多个不同的“问题” 0:00 ,每天都精确。因为我的网络应用程序在 ruby 中,所以我构建了一个 quarkus“微服务”来获取数据、计算解决方案并将其 return 发送到我的主应用程序。
在我的 application.properties 中,我设置:
quarkus.optaplanner.solver.termination.spent-limit=5s
这意味着每个请求需要 ~5s 来解决。但是一次发送 1500 个请求会使我机器上的 CPU 饱和。
有没有办法告诉 OptaPlanner 在解足够好时停止? (例如,如果分数稳定......)。这样我就可以根据问题将时间从 5 秒减少到 1-2 秒?
你对我的具体情况有什么建议?
SolverManager 将根据其 parallelSolverCount
配置自动对求解器作业进行排队:
quarkus.optaplanner.solver-manager.parallel-solver-count=3
在这种情况下,它将 运行 3 个并行解算器。因此,如果有 7 个数据集进来,它将解决其中的 3 个,另外 4 个稍后,因为较早的求解器终止。但是,如果您使用 moveThreadCount=2
,那么每个求解器至少使用 2 cpu 个核心,因此您至少使用 6 CPU 个核心。
默认情况下 parallelSolverCount
当前设置为 CPU 个核心的一半(它当前忽略 moveThreadCount)。在容器中,使用 JDK 11+ 很重要:容器的 CPU 计数通常与裸机不同。
您确实可以告诉 OptaPlanner 求解器在解决方案足够好时停止,例如,当达到某个分数或分数在一段时间内没有提高时,或它们的组合。 See these OptaPlanner docs. Quarkus 已经公开了其中一些(其余部分目前仍需要 solverConfig.xml 文件),一些 Quarkus 示例:
quarkus.optaplanner.solver.termination.spent-limit=5s
quarkus.optaplanner.solver.termination.unimproved-spent-limit=2s
quarkus.optaplanner.solver.termination.best-score-limit=0hard/-1000soft
我成功实现了满足我需求的求解器。但是,我需要 运行 解决 1500 多个不同的“问题” 0:00 ,每天都精确。因为我的网络应用程序在 ruby 中,所以我构建了一个 quarkus“微服务”来获取数据、计算解决方案并将其 return 发送到我的主应用程序。
在我的 application.properties 中,我设置:
quarkus.optaplanner.solver.termination.spent-limit=5s
这意味着每个请求需要 ~5s 来解决。但是一次发送 1500 个请求会使我机器上的 CPU 饱和。
有没有办法告诉 OptaPlanner 在解足够好时停止? (例如,如果分数稳定......)。这样我就可以根据问题将时间从 5 秒减少到 1-2 秒?
你对我的具体情况有什么建议?
SolverManager 将根据其 parallelSolverCount
配置自动对求解器作业进行排队:
quarkus.optaplanner.solver-manager.parallel-solver-count=3
在这种情况下,它将 运行 3 个并行解算器。因此,如果有 7 个数据集进来,它将解决其中的 3 个,另外 4 个稍后,因为较早的求解器终止。但是,如果您使用 moveThreadCount=2
,那么每个求解器至少使用 2 cpu 个核心,因此您至少使用 6 CPU 个核心。
默认情况下 parallelSolverCount
当前设置为 CPU 个核心的一半(它当前忽略 moveThreadCount)。在容器中,使用 JDK 11+ 很重要:容器的 CPU 计数通常与裸机不同。
您确实可以告诉 OptaPlanner 求解器在解决方案足够好时停止,例如,当达到某个分数或分数在一段时间内没有提高时,或它们的组合。 See these OptaPlanner docs. Quarkus 已经公开了其中一些(其余部分目前仍需要 solverConfig.xml 文件),一些 Quarkus 示例:
quarkus.optaplanner.solver.termination.spent-limit=5s
quarkus.optaplanner.solver.termination.unimproved-spent-limit=2s
quarkus.optaplanner.solver.termination.best-score-limit=0hard/-1000soft