Drools のユーザー フォーラムに投稿してみましたが、何の反応も得られませんでした (彼らは忙しいだけだと思います)。
「最高のスコア」を提供していないように見えるため、得られた結果に非常に混乱しています。ログ出力の一部を次に示します。
[construction steps]
2013-03-13 08:00:08,305 [com....] INFO Phase constructionHeuristic ended: step total (60), time spend (2222), best score (-200hard/-2780soft).
[local search steps]
2013-03-13 08:00:21,807 [com....] INFO Phase localSearch ended: step total (42), time spend (15724), best score (0hard/-2495soft).
2013-03-13 08:00:21,807 [com....] INFO Solving ended: time spend (15724), best score (0hard/-2495soft), average calculate count per second (3748).
ただし、返される結果には壊れたハード制約が含まれています (ログには「解決が終了しました: 時間 (15724)、最高のスコア (0hard/-2495soft)」と明確に記載されています) - スコア付きの結果が得られます - 200hard/-2495soft (建設フェーズのハード スコアとローカル検索フェーズのソフト スコアのようです)。これが本来あるべき姿ですか?マニュアルの何かを見逃していませんか (私はそれを読みましたが、完全には消化していません)?
これが私のソルバー構成のほとんどです(潜在的に関連する部分のみ):
<termination>
<terminationCompositionStyle>OR</terminationCompositionStyle>
<maximumSecondsSpend>60</maximumSecondsSpend>
<scoreAttained>0hard/0soft</scoreAttained>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
<constructionHeuristicPickEarlyType>FIRST_LAST_STEP_SCORE_EQUAL_OR_IMPROVING</constructionHeuristicPickEarlyType>
</constructionHeuristic>
<localSearch>
<termination>
<terminationCompositionStyle>OR</terminationCompositionStyle>
<maximumUnimprovedStepCount>20</maximumUnimprovedStepCount>
<scoreAttained>0hard/0soft</scoreAttained>
</termination>
<unionMoveSelector>
<changeMoveSelector>
<entitySelector>
<entityFilterClass>com.....RequiredTypeEntityFilter</entityFilterClass>
</entitySelector>
</changeMoveSelector>
<swapMoveSelector>
<entitySelector>
<entityFilterClass>com.....RequiredTypeEntityFilter</entityFilterClass>
</entitySelector>
</swapMoveSelector>
</unionMoveSelector>
<acceptor>
<solutionTabuSize>1000</solutionTabuSize>
<planningEntityTabuSize>7</planningEntityTabuSize>
</acceptor>
<forager>
<minimalAcceptedSelection>1000</minimalAcceptedSelection>
</forager>
</localSearch>
前もって感謝します!
編集:ここに役立つかもしれないもう少しの情報があります...上記のように、私の最高の(ハード)スコアは0であると言われていますが、それが提供するソリューションにはハード制約違反が含まれています。制約を出力するためのコードをいくつか追加しました (DroolsScoreDirector を使用して WorkingMemory を取得し、最終的に ConstraintOccurrences を取得します)... この出力はハード制約も示しています。
ConstraintType: NEGATIVE_HARD, RuleID: endLocationMustMatchStartLocation, Causes:...