Есть ли способ сохранить все возможные оценки? - PullRequest
1 голос
/ 13 мая 2019

Я создаю генератор расписания для студентов, и мне нужен способ создания более чем одного решения. Есть ли какой-нибудь способ сэкономить на реальных баллах или баллах Xhard / Ysoft?

Мне нужно иметь возможность выводить более одного потенциального расписания, чтобы у студента был выбор из одного расписания по сравнению с другим, если по какой-либо причине ему не нужен «лучший» график (возможно, нет как один из профессоров, может быть, они не хотят класс 8 утра, что угодно)

Моя первоначальная идея заключалась в том, чтобы избавиться от всех возможных решений с помощью прослушивателя событий bestSolutionChanged. Проблема в том, что, как только он находит оценку 0hard / 0soft, он игнорирует все оценки после этого, включая оценки, которые равны.

В идеале я хотел бы сэкономить на всех баллах 0hard / -3soft или выше, но было бы полезно иметь возможность сохранить любые возможные оценки или заставить optaplanner искать новый лучший результат.

1 Ответ

0 голосов
/ 15 мая 2019

Это не решение, а анализ проблемы:

Взлом BestSolutionRecaller - это, очевидно, не просто большая боль, но и поведение, которое мы не хотим поощрять, поскольку оно делает переход на более новую версию еще более болезненным. Поэтому не ждите, что мы решим эту проблему, добавив простой способ настройки в конфигурации Solver в ближайшее время. При этом явно необходимо решение этой общей проблемы.

Когда найдено новое лучшее решение, планирует клонировать (см. Документацию для определения) из рабочего решения (внутреннее решение в OptaPlanner). Это позволяет нам помнить это новое лучшее решение при изменении решения рабочего решения. Это также означает, что BestSolutionChangedEvents получает plannng клон и может безопасно отправить его в другой поток, например, чтобы упаковать его клиенту (при условии, что любые ProblemFactChange s, которые вы создаете, делают копии вместо изменений), без поврежден решающим потоком, который изменяет рабочее решение.

Новое лучшее решение подразумевает, что workingScore > bestScore. В тот момент, когда вместо этого получается workingScore >= bestScore, нам нужно гораздо больше клонов планирования (которые немного дороже ЦП), но тогда мы могли бы просто отправить BestSolutionChangedEvents для этого, тогда и только тогда, когда флаг включен конечно, потому что большинство пользователей (в отличие от вас) не хотят такого поведения.

Одно из предложений - создать отдельный BestSolutionChangedOrSameEvent рядом с BestSolutionChangedEvent. Это не может быть идеальным, потому что мы должны быть в состоянии определить, нужны ли кому-то эти дополнительные клоны планирования.

Другое предложение заключается в том, чтобы в конфиге <solver> был установлен флаг, который переключается с > на >= поведение для BestSolutionChangedEvent.

Пожалуйста, создайте jira (см. «Получить помощь» на веб-странице) и создайте ссылку на него здесь, или создайте заявку в службу поддержки (также см. «Получить помощь» на веб-странице).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...