DefaultConstructionHeuristicPhase - workingScoreHolder содержит неверную оценку не принятого хода

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

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

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

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

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


person Frank Ehrhoff    schedule 14.11.2018    source источник
comment
Что произойдет, если вы включите environmentMode FULL_ASSERT?   -  person Geoffrey De Smet    schedule 16.11.2018
comment
Изменился с DRL на IncrementalScoreCalculator, и теперь он работает. Скорее всего, у меня был недостаток в одном из моих слушателей CustomVariableListener.   -  person Frank Ehrhoff    schedule 02.12.2018


Ответы (1)


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

person Frank Ehrhoff    schedule 02.12.2018