ВКР: "Разработка приложения по автоматизации расписания ВУЗа с использованием генетического алгоритма"
Предлагается решение задачи составления оптимального расписания с использованием генетических алгоритмов, а также проводится качественное сравнение этого подхода с остальными, а также предлагается собственная реализация алгоритма на языке Java и интерфейс (как программный, так и пользовательский) для удобного взаимодействия с алгоритмом в виде клиент-серверного приложения, написанного с использованием фреймворков Spring и VueJS.
Будем называть учебным планом множество из троек
Тогда расписанием будем называть отображение из учебного плана в множество временных ячеек:
Корректность расписания определяется следующими естественными ограничениями:
- Каждый преподаватель может проводить только одно занятие одновременно
- Каждая группа может присутствовать только на одно занятии одновременно.
Расписание должно удовлетворять пожеланием групп и преподавателей, например:
- Преподаватель не может вести занятия в определенное время
- Требуется минимизировать количество окон как для преподавателей, так и для групп
- Минимизировать число учебных дней, в которые группа приходит на занятия
Пусть для каждого такого пожелания выбрана функция
Как можно видеть, если функция принимает значение
Как известно, генетический алгоритм состоит из следующих основных шагов:
- Инициализация
- Селекция
- Применение генетических операций (мутации, кроссинговер)
- Проверка условия останова, при необходимости переход к пункту
2
На шаге инициализации генерируется случайная популяция - множество особей.
Далее, на шаге селекции оценивается целевая функция для каждой особи и на основе полученных значений отбираются те особи, к которым будут применены генетические операции.
На третьем шаге к хромосомам (которые, в свою очередь, состоят из генов) применяются генетические операции для получения новых особей: или мутации в отдельных генах, или скрещивание хромосом двух особей для получения новых.
Наконец, проверяется условие окончания алгоритма: достижение приемлемой целевой функции, достижение заданного числа итераций, ограничение по времени выполнения или устойчивость целевой функции между итерациями.
В нашей задаче, особь - это одно конкретное расписание, соответственно популяция - множество расписаний на данном шаге. Мы выбрали представление каждой особи в виде одной хромосомы. Хромосома состоит из целочисленных генов, принимающих значение от