DB
Я года три назад подобных занимался, взяли что-то готовое в итоге. Задача звучала так:
— есть набор аудиторий с их вместимостью
— аудитории в разных корпусах, между корпусами разное время перехода
— есть набор преподавателей с разным временем занятости
— есть разные учебные дисциплины, разные преподаватели могут в разные дисциплины
— есть разные учебные группы разного объема
— у каждой учебной группы есть план по дисциплинам
— дисциплины могут преподаваться для потока из нескольких групп
— нужно составить расписание таким образом, чтобы все группы выполнили план, все пары поместились в аудитории, в расписании не было окон, количество переходов между корпусами было минимальным, а некоторые пары (физра, например) выппадали первой или последней для учебного дня этой группы