第 6 章 配置红帽构建的 OptaPlanner solver
您可以使用以下方法配置 OptaPlanner solver:
- 使用 XML 文件。
-
使用
SolverConfigAPI。 - 在域模型中添加类注解和 JavaBean 属性注解。
- 控制 OptaPlanner 用于访问您的域的方法。
- 定义自定义属性。
6.1. 使用 XML 文件配置 OptaPlanner solver
每个示例项目都有一个可编辑的解析器配置文件。& lt;EXAMPLE>SolverConfig.xml 文件位于 org.optaplanner.optaplanner-8.38.0.Final-redhat-00004/optaplanner-examples/src/main/resources/org/optaplanner/examples/<EXAMPLE> 目录中,其中 <EXAMPLE > 是 OptaPlanner 示例项目的名称。或者,您可以使用 SolverFactory .createFromXmlFile ()从文件创建 SolverFactory。但是,出于可移植性的原因,建议使用 classpath 资源。
Solver 和 SolverFactory 均有一个名为 Solution_ 的通用类型,这是代表计划问题和解决方案的类。
通过更改配置,OptaPlanner 使切换优化算法相对容易。
流程
-
使用
构建 Solver 实例。SolverFactory 配置 solver 配置 XML 文件:
- 定义模型。
- 定义 score 功能。
可选:配置优化算法。
以下示例是 NQueens 问题的 solver XML 文件:
<?xml version="1.0" encoding="UTF-8"?> <solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd"> <!-- Define the model --> <solutionClass>org.optaplanner.examples.nqueens.domain.NQueens</solutionClass> <entityClass>org.optaplanner.examples.nqueens.domain.Queen</entityClass> <!-- Define the score function --> <scoreDirectorFactory> <scoreDrl>org/optaplanner/examples/nqueens/optional/nQueensConstraints.drl</scoreDrl> </scoreDirectorFactory> <!-- Configure the optimization algorithms (optional) --> <termination> ... </termination> <constructionHeuristic> ... </constructionHeuristic> <localSearch> ... </localSearch> </solver>注意在某些环境中,如 OSGi 和 JBoss 模块,您的 JAR 文件中的 solver 配置、分数 DRLs 和域类等 classpath 资源可能无法提供给
optaplanner-coreJAR 文件的默认ClassLoader。在这些情况下,将您的类的ClassLoader作为参数提供:SolverFactory<NQueens> solverFactory = SolverFactory.createFromXmlResource( ".../nqueensSolverConfig.xml", getClass().getClassLoader());
使用 solver 配置 XML 文件来配置
SolverFactory,该文件作为 classLoader.getResource ()定义的类路径资源提供:SolverFasctory<NQueens> solverFactory = SolverFactory.createFromXmlResource( "org/optaplanner/examples/nqueens/optional/nqueensSolverConfig.xml"); Solver<NQueens> solver = solverFactory.buildSolver();