2017-10-25 20 views
0

私はHardMediumSoftScoreを使用してDRLを持っており、場合によっては計算中にスコア結果に差があり、スコアを説明する間に差があることが判明しました。スコア計算上の差を解決しながらスコアを説明する

このスニペットの終わりに
SolverFactory<Problem> solverFactory=solverFactory.cloneSolverFactory(); 
Solver<Problem> solver = requestSolverFactory.buildSolver(); 
Problem solved = solver.solve(problem); 

、ソルバーはスコアのいくつかの種類を記録します、例えば:上記のスニペットの後

Solving ended: time spent (100648), best score (-339hard/0medium/0soft)... 

は、私はすぐに持っている:

ScoreDirector<Roster> scoreDirector = solver.getScoreDirectorFactory().buildScoreDirector(); 
scoreDirector.setWorkingSolution(solved); 
scoreDirector.calculateScore(); 

for(ConstraintMatchTotal constraintMatchTotal : scoreDirector.getConstraintMatchTotals()) 
{ 
     LOG.debug("{} {} {}",constraintMatchTotal.getConstraintName(),constraintMatchTotal.getConstraintMatchCount(), constraintMatchTotal.getScoreTotal()); 
} 

ここではハードのスコアを常に一致しますが、解決の終わりにそこにない説明に中間点もあります:

hardConstraint 3 -339hard/0medium/0soft 
mediumConstraint 14 0hard/-1582medium/0soft 

誰でも知っていますか?

答えて

0

ソルバーの設定で、environmentModeFULL_ASSERT(またはFAST_ASSERT)をオンにして、十分長く実行させます。私はあなたがスコアの破損の例外を取得すると思われる。最初に修正してください。 (スコア破損エラーメッセージの分析を数回読んで理解してください)

+0

私のDRLの同じルールを参照して、「2 ConstraintMatches missing」のCHフェーズで失敗します。私は約10回それを読んだことがありますが、私は一日、私は何の手がかりがない、何が間違っている必要があります。 – TeeBea

+0

ゲッターとセッターのメソッドがJavaではなく、Roo(AspectJ)またはLombokによって生成されている場合、OptaPlannerは正しく機能しませんか?問題のルールを削除すると、CHフェイズの最後に不思議なIllegalStateExceptionsが発生しています。そのエンティティはソリューションの一部ではありません(ScoreDirectorに追加されていません)。 – TeeBea

+0

おそらく、RooやLombokのようなものがデフォルトのSolutionClonerに問題を引き起こすかもしれませんが、これについて初めて聞いています。あなたはそれらを再生器から取り除いて、まだ再生しているかどうか確認できますか? –

関連する問題