こんにちは、加藤です。
BRMSのルール定義を記述するxmlファイルについて、主だった箇所を調べました。
英語を訳しつつ書いたので間違っているかもしれません。
<scoreDirectorFactory>
スコアの設定を行います。
・内部項目
scoreDefinitionType:スコアの保持方法を設定
設定値は以下の通り
①SIMPLE
スコアを1種類だけ保持する
②HARD_SOFT
スコアをハード・ソフトの2種類保持する
③HARD_MEDIUM_SOFT
スコアをハード・ミディアム・ソフトの3種類保持する
④BENDABLE
スコアをハード・ソフトの2種類、指定した数だけ保持する
・記述例
<scoreDirectorFactory> <scoreDefinitionType>SIMPLE</scoreDefinitionType> ... </scoreDirectorFactory>
<termination>
探索の終了条件を記述します。最適解を指定するのが望ましいです。
・内部項目
scoreAttained:上限スコアを定義
maximumStepCount:上限ステップ数を定義
terminationCompositionStyle:条件が複数ある場合、ANDやORを定義
・記述例
<termination> <terminationCompositionStyle>OR</terminationCompositionStyle> <maximumStepCount>100</maximumStepCount> <scoreAttained>0</scoreAttained> </termination>
<constructionHeuristic>
初期化処理時のアルゴリズム設定を記述します。
・内部項目
constructionHeuristicType:アルゴリズムを定義
設定値はこちら
・記述例
<constructionHeuristic> <constructionHeuristicType>FIRST_FIT</constructionHeuristicType> <!-- <constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType> --> </constructionHeuristic>
<localSearch>
初期化処理後のアルゴリズム設定を記述します。
constructionHeuristicで初期化されたPlanningEntityを使用し、よりスコアが良い解を探索します。
・内部項目
selectionOrder:PlanningVariable(ルール適用中に変化する値)の選択方法を設定できる
設定値は以下の通り
①ORIGINAL
デフォルト順
②SORTED
ソート順(cacheType >= STEPが必要)
③RANDOM (default)
ランダム順(選択済みの値が複数回選択される可能性がある)
④SHUFFLED
ランダム順(選択済みの値が選択されることはない・cacheType >= STEPが必要)
⑤PROBABILISTIC
確率が高い順(選択済みの値が複数回選択される可能性がある・cacheType >= STEPが必要)
・記述例
<localSearch> <changeMoveSelector> ... <selectionOrder>RANDOM</selectionOrder> ... </changeMoveSelector> </localSearch>
<acceptor>
アクセプターは、PlanningVariableの動きをキャッチする役割を持っていると思われます。
ここにはキャッチ時のタブーの設定を記述します。
タブーを破った回数が設定値を超えた場合、探索を打ち切り、他のツリーを探索すると思われます。
・記述例
<acceptor> <entityTabuSize>7</entityTabuSize> </acceptor>
<Forager>
acceptorの動作を収集し、スコアが最も高いものをピックアップします。
スコア最高値が複数ある場合、ランダムで1つだけ選択します。
・内部項目
acceptedCountLimit:acceptorの動作数を設定する
pickEarlyType:Foragerの動作を設定する
設定値
①NEVER
デフォルト。全acceptor動作を評価する
②FIRST_BEST_SCORE_IMPROVING
最高スコアを更新したacceptor動作を評価する
③FIRST_LAST_STEP_SCORE_IMPROVING
最後のステップのスコアを更新したacceptor動作を評価する
※pickEarlyTypeはマニュアルにない項目が多数ある模様(サンプルでは使用されている)
・記述例
<forager> <pickEarlyType>NEVER</pickEarlyType> </forager>
所感
基本的なところは多分抑えたので、サンプルと合わせて見ればなんとなく作成できると思います。
だいたいデフォルトの記述で済むようにしているので、動かしてみる程度ならわりとすぐできるかもしれません。
英語力の問題でアルゴリズムが2つしか紹介できなかったので、できれば他のアルゴリズムの概要や、詳細な動作が解読できれば書いておきたいところです。
2013/12/20追記:アルゴリズムについては別記事にまとめました