Optaplanner: неполный список обоснований в решателе - PullRequest
0 голосов
/ 25 марта 2019

Я решаю проблему с составлением списка, используя optaplanner. Когда решатель заканчивается, я вижу журналы типа

INFO  [2019-03-25 22:42:41,486] org.optaplanner.core.impl.solver.DefaultSolver: Solving ended: time spent (4083), best score (-500hard/-6133758medium/-1477130soft)

После чего я печатаю список обоснования счета, используя

ScoreDirectorFactory<MyPlanningSolution> scoreDirectorFactory = solver.getScoreDirectorFactory();
ScoreDirector<MyPlanningSolution> guiScoreDirector = scoreDirectorFactory.buildScoreDirector();

guiScoreDirector.setWorkingSolution(planningSolutionInstance);

for (ConstraintMatchTotal constraintMatchTotal : guiScoreDirector.getConstraintMatchTotals()) {
    String constraintName = constraintMatchTotal.getConstraintName();
    // The score impact of that constraint
    Score scoreTotal = constraintMatchTotal.getScoreTotal();
    this.logger.info("constraintName " + constraintName + " scoreTotal " + scoreTotal + " Justification List :");

    for (ConstraintMatch constraintMatch : constraintMatchTotal.getConstraintMatchSet()) {
        List<Object> justificationList = constraintMatch.getJustificationList();
        this.logger.info(justificationList.toString() + " Score : " + constraintMatch.getScore());
    }
}

Это выводит только несколько ограничений:

constraintName Sample constraint1 scoreTotal -100hard/0medium/0soft Justification List :
[...] Score : -100hard/0medium/0soft
constraintName Sample constraint3 scoreTotal -400hard/0medium/0soft Justification List :
[...] Score : -100hard/0medium/0soft
[...] Score : -100hard/0medium/0soft
[...] Score : -100hard/0medium/0soft
[...] Score : -100hard/0medium/0soft
constraintName Sample constraint3 scoreTotal 0hard/-6133758medium/-1345422soft Justification List :
[...] Score : 0hard/0medium/-3125soft
[...] Score : 0hard/0medium/-625soft
[...] Score : 0hard/0medium/-25soft
[...] Score : 0hard/0medium/-16384soft
[...] Score : 0hard/0medium/-3125soft
[...] Score : 0hard/0medium/-3125soft
[...] Score : 0hard/0medium/-625soft
[...] Score : 0hard/0medium/-625soft
[...] Score : 0hard/0medium/-625soft
[...] Score : 0hard/0medium/-125soft
[...] Score : 0hard/0medium/-125soft
[...] Score : 0hard/0medium/-64soft
[...] Score : 0hard/0medium/-9soft

Если вы сложите счет, напечатанный здесь, вы получите -500hard/0medium/-28607soft

Как видите, здесь есть несколько ограничений, которые здесь не печатаются. Средние ограничения не регистрируются вообще. Плюс много мягких ограничений также отсутствует.

В чем может быть причина этого?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Звоните guiScoreDirector.calculateScore() после звонка guiScoreDirector.setWorkingSolution(planningSolutionInstance).

0 голосов
/ 26 марта 2019

Это может быть оценка коррупции. Включите environmentMode FULL_ASSERT, чтобы доказать это (пусть он работает в течение длительного времени). Если этот параметр включен, ошибка не возникает, попробуйте вместо этого NON_INTRUSIVE_FULL_ASSERT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...