Я какое-то время работал с optaplanner, но впервые делаю планирование в реальном времени, проблема довольно простая c цепочка VRP со временем windows, но точно знаю, что у меня проблема .
Поработав некоторое время, когда я удаляю некоторые Standstill
с помощью последовательности документации (ScoreDirector#beforeEntityRemoved
, удаление объекта из списка и обновление sh экземпляра списка, ScoreDirector#afterEntityRemoved
, а затем ScoreDirector#triggerVariableListeners
) из цепочки, цепочка становится несовместимой, следующая остановка previousStandStill не совпадает с текущей остановкой, а иногда даже null
Но все это происходит только когда я удалил более 2 или 3 Standstill
s, если я удалю только 1, он продолжает работать
PD: Об удалении объекта: Я пробовал с удалением и без удаления ссылки на объект из текущей цепочки, но когда я удаляю элемент из цепочка вручную иногда показывает ошибку, сообщающую мне, что ссылки неправильные, но я не понимаю, почему, когда я обнаруживаю, что цепочка несовместима optaplanner не обнаруживает его.
for (int i = 0; i < visitsToRemove.size(); i++) {
OptimizingVisit visit = visitsToRemove.get( i );
OptimizingVisit solverReference = scoreDirector.lookUpWorkingObject( visit );
scoreDirector.beforeEntityRemoved( solverReference );
solution.getVisits().remove( solverReference ); //working equals method is implemented here
solution.setVisits( new ArrayList<>( solution.getVisits() ) );
scoreDirector.afterEntityRemoved( solverReference );
logger.info( String.format("Order #%s (%s) was removed from the solution",visit.getOrderNumber(),visit.getOrderId()) );
}
Я знаю, что вам, ребята, может понадобиться дополнительная информация, и я дам ее вам по мере необходимости, но я, честно говоря, не знаю, что вам может понадобиться, моя проблема в значительной степени является копией примера с некоторыми идентификаторами для ссылки на объекты моего домена.
Заранее спасибо