Professional Documents
Culture Documents
Chapternbsp5nbspScore Calculation
Chapternbsp5nbspScore Calculation
o rg
} For example in n queens: public class NQueensSimpleScoreCalculat or implement s SimpleScoreCalculat or<NQueens> { public SimpleScore calculat eScore(NQueens nQueens) { int n = nQueens.get N(); List <Queen> queenList = nQueens.get QueenList ();
int score = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { Queen left Queen = queenList .get (i); Queen right Queen = queenList .get (j); if (left Queen.get Row() != null && right Queen.get Row() != null) { if (left Queen.get RowIndex() == right Queen.get RowIndex()) { score--; } if (left Queen.get AscendingDiagonalIndex() == right Queen.get AscendingDiagonalIndex()) { score--; } if (left Queen.get DescendingDiagonalIndex() == right Queen.get DescendingDiagonalIndex()) { score--; } } } } ret urn SimpleScore.valueOf(score); } } Conf igure it in your solver conf iguration:
<scoreDirect orFact ory> <scoreDenit ionType>...</scoreDenit ionType> <simpleScoreCalculat orClass>org.opt aplanner.examples.nqueens.solver.score.NQueensSimpleScoreCalculat or</simpleScoreCalculat orClass> </scoreDirect orFact ory> Alternatively, build a SimpleScoreCalculat or instance at runtime and set it with the programmatic API:
<environment Mode>FAST_ASSERT</environment Mode> ... <scoreDirect orFact ory> <scoreDenit ionType>...</scoreDenit ionType> <scoreDrl>/org/opt aplanner/examples/nqueens/solver/nQueensScoreRules.drl</scoreDrl> <assert ionScoreDirect orFact ory> <simpleScoreCalculat orClass>org.opt aplanner.examples.nqueens.solver.score.NQueensSimpleScoreCalculat or</simpleScoreCalculat orClass> </assert ionScoreDirect orFact ory> </scoreDirect orFact ory> T his way, the scoreDrl will be validated by the SimpleScoreCalculat or.