Автоматическое расписание на основе 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.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support