6.2. Java API を使用した OptaPlanner のソルバーの設定
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();
ソルバー設定 XML ファイルのすべての要素は、パッケージ namespace org.optaplanner.core.config
の Config
クラスまたは プロパティー
として使用できます。これらの Config
クラスは XML 形式の Java 表現です。これらのコンポーネントには、パッケージ namespace 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(); ... }