第 8 章 OptaPlanner Solver


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

public interface Solver<Solution_> {

    Solution_ solve(Solution_ problem);

    ...
}
Copy to Clipboard Toggle word wrap

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

8.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) 方法提供的解决方案实例可以部分或完全初始化,这通常是重复计划中的情况。

图 8.1. 在 8ms (Also a Optimal Solution)中 Four Queens Puzzle 最佳解决方案。

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

注意

给方法 解决 的解决方案实例由 Solver 更改,但不会误认为最佳解决方案。

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat