Почему ScoreManager меняет решение на худшее?
Я использую solverManager, чтобы постоянно сохранять лучший результат:
solverManager.solveAndListen(
SINGLETON_TIME_TABLE_ID,
this::findById,
this::save
)
Мой метод save () просто обновляет глобальную ссылку на лучшее решение, и с ним больше ничего не происходит.
Однако когда я пытаюсь найти лучшее решение и получить подробную информацию о счете, не всегда получается лучшее решение:
val solution: MySolution = findById(SINGLETON_TIME_TABLE_ID)
println(solution.score) // prints 1100
scoreManager.updateScore(solution) // Sets the score
println(solution.score) // prints 1020 (it's now worse than before)
Просто звонить
scoreManager.updateScore(solution)
кажется, возвращает худшее решение. В приведенном выше примере оценка может снизиться с 1100 до 1020. Есть ли этому очевидное объяснение?
я использую
SimpleScore
и это происходит хорошо после того, как все переменные планирования назначены.
Я использую прослушиватель переменных
ArrivalTimeUpdatingVariableListener : VariableListener
.
Не уверен, что еще имеет значение. Спасибо
1 ответ
Это имеет все предупреждающие признаки коррупции оценки. Пожалуйста, запустите свой решатель на пару минут с помощью
<environmentMode>FULL_ASSERT</environmentMode>
. Если вы увидите, что выбрасываются исключения, вы знаете, что в ваших ограничениях есть ошибка. Что это за ошибка, я не могу знать, пока не увижу эти ограничения.