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
誰でも知っていますか?
私のDRLの同じルールを参照して、「2 ConstraintMatches missing」のCHフェーズで失敗します。私は約10回それを読んだことがありますが、私は一日、私は何の手がかりがない、何が間違っている必要があります。 – TeeBea
ゲッターとセッターのメソッドがJavaではなく、Roo(AspectJ)またはLombokによって生成されている場合、OptaPlannerは正しく機能しませんか?問題のルールを削除すると、CHフェイズの最後に不思議なIllegalStateExceptionsが発生しています。そのエンティティはソリューションの一部ではありません(ScoreDirectorに追加されていません)。 – TeeBea
おそらく、RooやLombokのようなものがデフォルトのSolutionClonerに問題を引き起こすかもしれませんが、これについて初めて聞いています。あなたはそれらを再生器から取り除いて、まだ再生しているかどうか確認できますか? –