Это не решение, а анализ проблемы:
Взлом BestSolutionRecaller
- это, очевидно, не просто большая боль, но и поведение, которое мы не хотим поощрять, поскольку оно делает переход на более новую версию еще более болезненным. Поэтому не ждите, что мы решим эту проблему, добавив простой способ настройки в конфигурации Solver в ближайшее время. При этом явно необходимо решение этой общей проблемы.
Когда найдено новое лучшее решение, планирует клонировать (см. Документацию для определения) из рабочего решения (внутреннее решение в OptaPlanner). Это позволяет нам помнить это новое лучшее решение при изменении решения рабочего решения. Это также означает, что BestSolutionChangedEvents получает plannng клон и может безопасно отправить его в другой поток, например, чтобы упаковать его клиенту (при условии, что любые ProblemFactChange
s, которые вы создаете, делают копии вместо изменений), без поврежден решающим потоком, который изменяет рабочее решение.
Новое лучшее решение подразумевает, что workingScore > bestScore
. В тот момент, когда вместо этого получается workingScore >= bestScore
, нам нужно гораздо больше клонов планирования (которые немного дороже ЦП), но тогда мы могли бы просто отправить BestSolutionChangedEvents для этого, тогда и только тогда, когда флаг включен конечно, потому что большинство пользователей (в отличие от вас) не хотят такого поведения.
Одно из предложений - создать отдельный BestSolutionChangedOrSameEvent
рядом с BestSolutionChangedEvent
. Это не может быть идеальным, потому что мы должны быть в состоянии определить, нужны ли кому-то эти дополнительные клоны планирования.
Другое предложение заключается в том, чтобы в конфиге <solver>
был установлен флаг, который переключается с >
на >=
поведение для BestSolutionChangedEvent
.
Пожалуйста, создайте jira (см. «Получить помощь» на веб-странице) и создайте ссылку на него здесь, или создайте заявку в службу поддержки (также см. «Получить помощь» на веб-странице).