DefaultConstructionHeuristicPhase - workingScoreHolder содержит недопустимый счет непринятого хода - PullRequest
0 голосов
/ 15 ноября 2018

Я создаю решение VRP на основе optaplanner 7.4.1.использование эвристики по умолчанию "FIRST_FIT_DECREASING".Теперь в ConstructionHeuristicDecider я вижу, что в конце метода defineNextStep выбирается шаг, который передается обратно в метод решения DefaultConstructionHeuristicPhase.Все хорошо.Оценка этого шага в порядке, но следующее размещение в цикле решения теперь начинается с оценки последнего проверенного хода в цикле хода решения defineNextStep, а не со счета выбранного хода.

Итакесли на первом шаге была выбрана оценка «init: -157 / hard: 0 / soft: -2100», то теперь он начинает первый расчет на основе последней проверенной оценки (например, «init: -157 / hard: -111 /»).мягкий: -2200" ).Так как начальная оценка второго шага ниже, и жесткое ограничение не трогается, в первом вызове addMove объекта ConstructionHeuristicDecider добавляется недопустимая оценка (первый ход второго шага вообще не должен иметь жесткую оценку).

Я думаю, что основная проблема заключается в том, что при вызове «kieSession.fireAllRules ()» в DroolsScoreDirector calculateScore рабочаяScoreHolder по-прежнему удерживает последний проверенный, но не принятый результат из последнего шага предыдущего шага.,У кого-нибудь есть идеи, как справиться с этой проблемой?

Дополнительная информация: может быть, другой подход может заключаться в том, чтобы проверить, не должен ли рабочийScoreHolder в doMove объекта ConstructionHeuristicDecider после выполнения операции отмены перемещений сбрасываться на счет довыполняя оригинальный ход.Насколько я понимаю, подсчет очков за ход явно выполняется в процессе.После этого рабочая оценка не пересчитывается после выполнения отмены хода.Таким образом, оценка и решение не синхронизированы в тот момент времени.

С уважением, Фрэнк

1 Ответ

0 голосов
/ 02 декабря 2018

восстановление оценки с помощью специального ScoreCalculator, позволяющее избежать, вероятно, некоторых ошибок в моих CustomShadowVaribleListeners, решило проблему

...