Я должен реализовать алгоритм, который генерирует расписание для университета. Я искал и нашел много алгоритмов. Но вот проблема. Мне нужен алгоритм, который генерирует расписание в течение целого семестра, не на еженедельной основе. Это должно также рассмотреть предопределенный порядок частей курса, например, упражнение 1 должно быть после лекции 2 и перед лекцией 3. У Вас есть какие-либо предложения?
Спасибо.
ОБНОВЛЕНИЕ:
У меня есть следующие трудные ограничения:
H1: Только одна часть курса присвоена каждой комнате в любое время слот.
H2: комната может разместить всех студентов посещения и удовлетворяет все функции, требуемые событием.
H3: Никакой студент не посещает режим, чем один курс одновременно (по крайней мере, обязательные курсы)
H-4: Никакой учитель не преподает больше чем одну часть курса одновременно.
Мягкие ограничения:
S1: часть курса не должна быть выделена временному интервалу, неудобному для лектора.
S2: должно быть минимальное количество разрывов между классами учителя.
S3: должно быть минимальное количество разрывов между классами для студента.
S4: Классы должны удовлетворить предпочтения лектора - дни и временные интервалы.
S5: части Курса, как должны планировать, предопределят порядок.
Пример:
Курс "Программная архитектура"
Week No Course Room Course Part Day Time
--------+---------+-------+--------------+----------+-----
Week 1: SA 435 Lecture 1 Wednesday 8.15-11
Week 2: SA 435 Lecture 2 Wednesday 8.15-11
Week 3: SA 47 Lab 1 Monday 13-15
Week 3: SA 436 Lecture 3 Wednesday 11-14
Week 4: SA 243 Exercise 1 Monday 13-15
Week 5: SA 436 Lecture 4 Wednesday 8.15-11
Вы можете изучить интервальное планирование . Похоже, вам понадобится модифицированная версия, которая добавила бы некоторые ограничения, например, где разрешено размещать упражнения. Жадные алгоритмы обычно довольно легко модифицировать, и существует целая куча уже модифицированных версий базового алгоритма IS.
IIRC такая проблема не решается полностью алгоритмом.