Автоматическое расписание на основе DQN
Веб-приложение: вводите группы, аудитории и нагрузку преподавателей — получаете расписание без конфликтов.
Как это работает
- Жёсткие ограничения (конфликты преподавателей, групп, аудиторий, вместимость, тип аудитории) — это маска допустимых
действий. Нейросеть нарушить их не может, итог дополнительно проверяет независимая
verify. - Нейросеть оценивает каждого кандидата (слот + аудитория) по 14 признакам: окна у группы и преподавателя, нагрузка дня, повтор предмета в день, дефицит свободных аудиторий, «давление» оставшейся нагрузки и др. Веса не зависят от размера задачи.
- Поиск с возвратом: сеть упорядочивает варианты, при тупике алгоритм откатывается и пробует следующий по Q. Несколько попыток с разным порядком занятий, выбирается лучшая.
- Перед поиском данные проверяются на заведомую невыполнимость (часы преподавателя/группы больше числа слотов, нет подходящих аудиторий и т. п.) с понятным сообщением.
Файлы
app.py— интерфейс (Gradio)scheduler_core.py— среда, нейросеть (numpy), обучение, поиск, проверкаtrain.py— локальное предобучение →weights.npz(с метриками на отложенных задачах)benchmark.py— сравнение сети с необученной сетью и ручной эвристикойweights.npz— предобученные веса
Запуск
pip install -r requirements.txt
python train.py --episodes 4000 | tee train.log # один раз
python benchmark.py --weights weights.npz # проверить, что обучение помогает
python app.py
Файл весов привязан к версии набора признаков: от старой версии программы он не загрузится (будет понятная ошибка).
Ограничения
Час нагрузки = одна пара. Не поддерживаются пожелания преподавателей и недоступные слоты, сдвоенные пары, чётные/нечётные недели. Для плотных расписаний с гарантией оптимальности лучше подходят CP-SAT / ILP.
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support