第 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) 的计划克隆,这意味着它是一种不同的实例。