在解决和解释分数时得分计算差异

时间:2017-10-25 15:12:54

标签: optaplanner

我使用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

有人有个主意吗?

1 个答案:

答案 0 :(得分:0)

在求解器配置中,启用environmentMode FULL_ASSERT(或FAST_ASSERT)并让它运行足够长的时间。我怀疑你会得到一个分数腐败例外。先解决这个问题。 (阅读分数损坏错误消息分析几次以了解它。)