我使用HardMediumSoftScore获得DRL,并且发现在某些情况下,在计算时以及之后在解释分数时,得分结果会有所不同。
SolverFactory<Problem> solverFactory=solverFactory.cloneSolverFactory();
Solver<Problem> solver = requestSolverFactory.buildSolver();
Problem solved = solver.solve( problem );
在此片段的末尾,Solver会记录某种分数,例如:
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 :(得分:0)
在求解器配置中,启用environmentMode
FULL_ASSERT
(或FAST_ASSERT
)并让它运行足够长的时间。我怀疑你会得到一个分数腐败例外。先解决这个问题。
(阅读分数损坏错误消息分析几次以了解它。)