#optaplanner
Вопрос:
Поэтому я реализовал пример TWVRP с задержкой до последнего шаблона: https://docs.optaplanner.org/8.6.0.Final/optaplanner-docs/html_single/#chainedThroughTimeAutomaticDelayUntilLast
Мой код выходит из себя, когда две части одной и той же остановки назначаются одному и тому же транспортному средству, поэтому я стараюсь избежать этого с помощью фильтра выбора перемещения. Этот фильтр работает просто отлично, но я все равно попадаю в сценарии, где посещения назначаются таким образом, и я получаю повреждение баллов. Какие еще типы перемещений использует фаза CH по умолчанию, которые мне нужно отфильтровать? Конфигурация моей фазы CH прямо сейчас:
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
<changeMoveSelector>
<filterClass>org.acme.solver.filters.VisitChangeMoveFilter</filterClass>
</changeMoveSelector>
</constructionHeuristic>
Обновить:
Искажение счета, похоже, происходит во время движения noop (Посещение-мои остановки, Сотрудник-мои якоря). Зачем Optaplanner пробовать такой ход?
VariableListener corruption after completedAction
(Visit{id=3743c419-aff3-46c6-969c-4c85cb5656ad,
arrivalTime=2021-06-03T17:00,
linkedVisit =76ba82ef-e146-498a-9fdd-8c51adb2198e,
previousStop=Employee{id=8d2b8894-a13a-41d6-9def-05b2ac1facf2}}
{Employee{id=8d2b8894-a13a-41d6-9def-05b2ac1facf2} -> Employee{id=8d2b8894-a13a-41d6-9def-05b2ac1facf2}})
Комментарии:
1. Повреждение списка переменных обычно является ошибкой в прослушивателе пользовательских переменных. Вы пользуетесь одним из них? Пожалуйста, поделитесь. В противном случае в вопросе недостаточно информации. Я думаю, что CH использует только движения изменения. Это ожидаемо. Не уверен, чего вы пытаетесь достичь с помощью фильтра. Обычно, если движение делает что-то, что вам «не нравится», вы наказываете это баллом. Если изменение хода приводит к повреждению счета, у вас есть проблема в другом месте.