第 7 章 OptaPlanner Solver


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

public interface Solver<Solution_> {

    Solution_ solve(Solution_ problem);

    ...
}
Copy to Clipboard Toggle word wrap

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

7.1. 解决问题

使用 solver 解决规划问题。

先决条件

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

流程

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

以下示例解决了 NQueens 问题:

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

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

注意

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

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

根据问题大小和 solver 配置,解析 (Solution) 方法可能需要很长时间。Solver 智能处理可能解决方案的搜索空间,并记住其在技术期间遇到的最佳解决方案。根据多个因素,包括问题大小、Solver 提供的时间、解析器配置等,最佳解决方案 可能 是最佳解决方案

注意

提供给方法解析 (Solution) 的解决方案实例由 Solver 更改,但不会为最佳解决方案错误。

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat