Почему 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>. Если вы увидите, что выбрасываются исключения, вы знаете, что в ваших ограничениях есть ошибка. Что это за ошибка, я не могу знать, пока не увижу эти ограничения.

Другие вопросы по тегам