第 7 章 OptaPlanner Solver
解决方法可以找到您规划问题的最佳解决方案。解决者一次只能解决一个规划问题实例。solvers 使用 Solver Factory 方法
构建:
A solver 应该只从单一线程访问,除了在 javadoc
中作为 thread-safe 记录的方法除外。solve ()
方法记录当前线程。处理线程可能会导致 REST 服务的 HTTP 超时,它需要额外的代码来并行处理多个数据集。要避免这个问题,请使用 SolverManager
。
7.1. 解决问题 复制链接链接已复制到粘贴板!
使用 solver 解决规划问题。
先决条件
-
从 solver 配置构建的
Solver
-
代表规划问题实例的
@PlanningSolution
注释
流程
提供规划问题作为 resolve ()方法
的参数。该解决方案将返回最佳解决方案。
以下示例解决了 NQueens 问题:
NQueens problem = ...; NQueens bestSolution = solver.solve(problem);
NQueens problem = ...;
NQueens bestSolution = solver.solve(problem);
在本例中,solv ()
方法将返回 NQueens
实例,每个 Queen
分配给 Row
。
提供给解析 (Solution)
方法的解决方案实例可以部分或完全初始化,通常是重复规划的情况。
图 7.1. 在 8ms 中为 Four Queens Puzzle (Also Optimal Solution)的最佳解决方案
根据问题大小和 solver 配置,解析 (Solution)
方法可能需要很长时间。Solver
智能处理可能解决方案的搜索空间,并记住其在技术期间遇到的最佳解决方案。根据多个因素,包括问题大小、Solver
提供的时间、解析器配置等,最佳解决方案
可能 是最佳解决方案
。
提供给方法解析 (Solution)
的解决方案实例由 Solver
更改,但不会为最佳解决方案错误。
方法解析 (Solution)
或 getBestSolution ()
返回的解决方案实例很可能是提供给方法解析 (Solution)
的计划克隆,这意味着它是一种不同的实例。