第 8 章 OptaPlanner Solver


解决者找到规划问题的最佳的最佳解决方案。解决者一次只能解决一个规划问题实例。解决者通过 SolverFactory 方法构建:

public interface Solver<Solution_> {

    Solution_ solve(Solution_ problem);

    ...
}
Copy to Clipboard Toggle word wrap

只能从单一线程访问地址,除了 javadoc 中被记录为线程安全的方法除外。solve() 方法处理当前的线程。Hogging 线程可能会导致 REST 服务的 HTTP 超时,它需要额外的代码来并行解决多个数据集。要避免这个问题,请使用 SolverManager

8.1. 解决问题

使用解决方法解决规划问题。

先决条件

  • 从解决器配置构建的 Solver
  • 代表规划问题实例的 @PlanningSolution 注解

流程

提供规划问题作为 solve() 方法的参数。解决者将返回找到的最佳解决方案。

以下示例解决了 NQueens 问题:

    NQueens problem = ...;
    NQueens bestSolution = solver.solve(problem);
Copy to Clipboard Toggle word wrap

在本示例中,solution () 方法会返回一个 NQueens 实例,并且每个 Queen 分配给

注意

提供给 解决方法(Solution) 方法的解决方案实例可以是部分或完全初始化,这通常是重复规划的情况。

图 8.1. 8ms 中的 Four Queens Puzzle best Solution(Also a Optimal Solution)

解决(Solution) 方法可能需要很长时间,具体要看问题的大小和解决方法配置。Solver 智能地处理可能解决方案的搜索空间,并记住在解决过程中遇到的最佳解决方案。根据很多因素,包括问题的大小、Solver 的时间、解决器配置等等,最佳解决方案 可能是或可能不是最佳解决方案。

注意

提供给方法 解决(Solution) 的解决方案实例已被 Solver 更改,但不要为最好的解决方案出现错误。

方法返回的解决方案实例 (Solution)getBestSolution() 很可能是向方法 解决(Solution) 方法的规划克隆,这意味着它是不同的实例。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat