Я работаю над широко используемым механизмом планирования, который делает именно это. Да, это NP-Complete; лучшие подходы стремятся приблизить оптимальное решение. И, конечно, есть много разных способов сказать, какой из них является «лучшим» решением - важнее ли, чтобы ваши учителя были довольны своим расписанием или, например, учащиеся посещали все свои классы?
Абсолютно самый важный вопрос, который вам нужно решить на раннем этапе, это , что делает один способ планирования этой системы лучше, чем другой ? То есть, если у меня есть расписание с миссис Джонс, преподающей математику в 8, и мистером Смитом, преподающей математику в 9, это лучше или хуже, чем у одного из них, когда они оба преподают математику в 10? Это лучше или хуже, чем у миссис Джонс, которая преподает в 8, и мистер Джонс, преподающий в 2? Почему?
Главный совет, который я бы дал здесь, - разделить проблему как можно больше - возможно, курс за курсом, может быть, учитель за учителем, может быть, комната за комнатой - и сначала поработать над решением подзадачи. Там вы должны получить несколько решений на выбор, и вам нужно выбрать одно из них как наиболее вероятное оптимальное. Затем, работа по созданию «более ранних» подзадач учитывает потребности более поздних подзадач при определении их потенциальных решений. Затем, возможно, поработайте над тем, как вывести себя из зарисованных в угол ситуаций (при условии, что вы не можете предвидеть эти ситуации в более ранних подзадачах), когда перейдете в состояние «нет действительных решений».
Этап оптимизации локального поиска часто используется для «полировки» конечного ответа для получения лучших результатов.
Обратите внимание, что обычно мы имеем дело с системами с ограниченными ресурсами в школьном планировании. Школы не проходят в течение всего года с большим количеством пустых комнат или учителей, которые сидят в гостиной 75% дня. Подходы, которые лучше всего работают в богатых решениями средах, не обязательно применимы в школьном расписании.