搜索

第 8 章 OptaPlanner Solver

download PDF

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

public interface Solver<Solution_> {

    Solution_ solve(Solution_ problem);

    ...
}

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

8.1. 解决问题

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

先决条件

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

流程

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

以下示例解决了 NQueens 问题:

    NQueens problem = ...;
    NQueens bestSolution = solver.solve(problem);

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

注意

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

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

solvedNQueens04

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

注意

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.