第7章 OptaPlanner ソルバーの RedHat ビルドの設定

以下の方法を使用して、OptaPlanner のソルバーを設定できます。

  • XML ファイルを使用します。
  • SolverConfig API を使用します。
  • ドメインモデルにクラスアノテーションと JavaBean プロパティーアノテーションを追加します。
  • OptaPlanner がドメインにアクセスするために使用するメソッドを制御します。
  • カスタムプロパティーを定義します。

7.1. XML ファイルを使用した OptaPlanner のソルバーの設定

XML ファイルを使用して Solver を設定できます。Maven ディレクトリー構造に従う一般的なプロジェクトでは、 SolverFactory を使用して Solver インスタンスをビルドした後、 solverConfigXML ファイルは $ PROJECT_DIR / src / main / resources / org / optaplanner / examples / <PROJECT> / solver ディレクトリーにあります。ここで、 <PROJECT> は OptaPlanner プロジェクトの名前です。または、SolverFactory.createFromXmlFile() で ファイルから SolverFactory を作成することもできます。ただし、移植性の理由から、クラスパスのリソースが推奨されます。

SolverSolverFactory の両方に、 Solution_ と呼ばれるジェネリック型があります。これは、計画の問題と解決策を表すクラスです。

OptaPlanner を使用すると、設定を変更することで、最適化アルゴリズムを比較的簡単に切り替えることができます。

手順

  1. SolverFactorySolver インスタンスをビルドします。
  2. Solver 設定の XML ファイルを設定します。

    1. モデルを定義します。
    2. スコア機能を定義します。
    3. 必要に応じて、最適化アルゴリズムを設定します。

      以下の例は、NQueens 問題に対するソルバー 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/solver/nQueensConstraints.drl</scoreDrl>
        </scoreDirectorFactory>
      
        <!-- Configure the optimization algorithms (optional) -->
        <termination>
          ...
        </termination>
        <constructionHeuristic>
          ...
        </constructionHeuristic>
        <localSearch>
          ...
        </localSearch>
      </solver>
      注記

      一部の環境では、OSGi や JBoss モジュールなどの一部の環境では、JAR ファイルのソルバー設定、スコア DRL、ドメインクラスなどのクラスパスリソースが optaplanner-core JAR ファイルのデフォルトの ClassLoader で利用できない場合もあります。このような場合は、クラスの ClassLoader をパラメーターとして提供します。

             SolverFactory<NQueens> solverFactory = SolverFactory.createFromXmlResource(
                     ".../nqueensSolverConfig.xml", getClass().getClassLoader());
  3. ClassLoader.getResource() で定義されているクラスパスリソースとして提供されるソルバー設定 XML ファイルを使用して SolverFactory を設定します。

           SolverFasctory<NQueens> solverFactory = SolverFactory.createFromXmlResource(
                   "org/optaplanner/examples/nqueens/solver/nqueensSolverConfig.xml");
           Solver<NQueens> solver = solverFactory.buildSolver();