6.2. 使用 Java API 配置 OptaPlanner solver
您可以使用 SolverConfig
API 配置 solver。这在运行时动态更改值特别有用。以下示例在 NQueens 项目中构建 Solver
之前更改基于系统属性的运行时间:
SolverConfig solverConfig = SolverConfig.createFromXmlResource( "org/optaplanner/examples/nqueens/optional/nqueensSolverConfig.xml"); solverConfig.withTerminationConfig(new TerminationConfig() .withMinutesSpentLimit(userInput)); SolverFactory<NQueens> solverFactory = SolverFactory.create(solverConfig); Solver<NQueens> solver = solverFactory.buildSolver();
solver 配置 XML 文件中的每个元素都作为 Config
类或软件包命名空间 org.optaplanner.core.config
中的 Config
类的属性提供。这些配置
类是 XML 格式的 Java 表示。它们构建软件包命名空间的 org.optaplanner.core.impl
并将其编译成一个高效的 Solver
。
注意
要为每个用户请求动态配置 SolverFactory
,请在初始化过程中构建模板 SolverConfig
,并使用每个用户请求的复制构造器复制它。以下示例演示了如何进行此操作,并带有 NQueens 问题:
private SolverConfig template; public void init() { template = SolverConfig.createFromXmlResource( "org/optaplanner/examples/nqueens/optional/nqueensSolverConfig.xml"); template.setTerminationConfig(new TerminationConfig()); } // Called concurrently from different threads public void userRequest(..., long userInput) { SolverConfig solverConfig = new SolverConfig(template); // Copy it solverConfig.getTerminationConfig().setMinutesSpentLimit(userInput); SolverFactory<NQueens> solverFactory = SolverFactory.create(solverConfig); Solver<NQueens> solver = solverFactory.buildSolver(); ... }