第 8 章 OptaPlanner Solver
解决者找到规划问题的最佳的最佳解决方案。解决者一次只能解决一个规划问题实例。解决者通过 SolverFactory
方法构建:
public interface Solver<Solution_> { Solution_ solve(Solution_ problem); ... }
只能从单一线程访问地址,除了 javadoc
中被记录为线程安全的方法除外。solve()
方法处理当前的线程。Hogging 线程可能会导致 REST 服务的 HTTP 超时,它需要额外的代码来并行解决多个数据集。要避免这个问题,请使用 SolverManager
。
8.1. 解决问题
使用解决方法解决规划问题。
先决条件
-
从解决器配置构建的
Solver
-
代表规划问题实例的
@PlanningSolution
注解
流程
提供规划问题作为 solve()
方法的参数。解决者将返回找到的最佳解决方案。
以下示例解决了 NQueens 问题:
NQueens problem = ...; NQueens bestSolution = solver.solve(problem);
在本示例中,solution ()
方法会返回一个 NQueens
实例,并且每个 Queen
分配给 行
。
提供给 解决方法(Solution)
方法的解决方案实例可以是部分或完全初始化,这通常是重复规划的情况。
图 8.1. 8ms 中的 Four Queens Puzzle best Solution(Also a Optimal Solution)
解决(Solution)
方法可能需要很长时间,具体要看问题的大小和解决方法配置。Solver
智能地处理可能解决方案的搜索空间,并记住在解决过程中遇到的最佳解决方案。根据很多因素,包括问题的大小、Solver
的时间、解决器配置等等,最佳解决方案
可能是或可能不是最佳解决方案。
提供给方法 解决(Solution)
的解决方案实例已被 Solver
更改,但不要为最好的解决方案出现错误。
方法返回的解决方案实例 (Solution)
或 getBestSolution()
很可能是向方法 解决(Solution)
方法的规划克隆,这意味着它是不同的实例。