第 7 章 使用 OptaPlanner solver


解决者为您规划问题找到最佳和最佳解决方案。一个解决者一次只能解决一个规划问题实例。solvers 使用 Solver Factory 方法 构建:

public interface Solver<Solution_> {

    Solution_ solve(Solution_ problem);

    ...
}
Copy to Clipboard Toggle word wrap

一个 solver 应该只从单个线程访问,除了 javadoc 中特别记录为 thread-safe 的方法。solve () 方法调整当前线程。拖放线程可能会导致 REST 服务的 HTTP 超时,它需要额外的代码来并行解决多个数据集。要避免这些问题,请使用 SolverManager

7.1. 解决问题

使用解决方案解决计划问题。

先决条件

  • 从 solver 配置构建的 Solver
  • 代表规划问题实例的 @PlanningSolution 注释

流程

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

以下示例解决了 NQueens 问题:

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

在本例中,solve () 方法将返回 NQueens 实例,每个 Queen 分配到一个 Row

注意

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

图 7.1. 用于 8ms 中 Four Queens Puzzle 的最佳解决方案(Also a Optimal Solution)

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

注意

提供给方法 解决(Solution) 的解决方案实例由 Solver 更改,但不要将其错误地用于最佳解决方案。

方法 解决(Solution)getBestSolution () 返回的解决方案实例最有可能是提供给方法 解决(Solution) 的规划克隆,这意味着它是一个不同的实例。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat