Постановка задачи
Цель дипломной работы - разработать алгоритм для составления учебного расписания, используя генетические алгоритмы.
Для решения данной задачи необходимо выполнить следующие задачи:
1) Изучить существующие методы составления учебного расписания и выбрать подходящий метод для решения задачи.
2) Разработать генетический алгоритм, который будет использоваться для оптимизации задачи составления учебного расписания.
3) Сделать выводы и предложить возможные направления дальнейших исследований в данной области.
Результатом дипломной работы должен быть рабочий алгоритм для составления учебного расписания, который может быть использован в образовательных учреждениях для оптимизации учебного процесса
Описание программы
Перед запуском алгоритма пользователю необходимо заполнить список исходных данных, то есть группы, которые включают в себя предметы, преподавателей и кабинеты.
Следом, он должен настроить параметры алгоритма (количество популяции, поколений, вероятность кроссинговера, вероятность мутации и другие), затем необходимо настроить систему штрафов (штраф за неполные пары, несоответствие предметов преподавателя и так далее). От данных значений зависит насколько правильно алгоритм исполнит свою задачу.
После приведенных действий пользователь может запустить алгоритм и проанализировать его работу, смотря на график зависимости минимальной, средней и максимальной приспособленности от поколения. И в зависимости от конечного результата либо изменить гиперпараметры, чтобы улучшить следующий результат, либо сохранить расписание для последующего его использования.
Фрагмент программного кода
public void start(Train output) { // Инициализируем начальную популяцию population = populationCreator(); // Создаем списки, в которых будет хранится статистика List<double> avg = new List<double>(); List<double> min = new List<double>(); List<double> max = new List<double>(); List<double> generations = new List<double>(); // Запускаем алгоритм на max_generation поколений for (int gen = 0; gen < max_generation; gen++) { // Отбор, кроссинговер, мутаиция population = selTournament(); population = cxTwoPoints(); population = mutUniformInt(); // Сохраняем для статистики avg.Add(population.Average(ind => ind.Fitness())); min.Add(population.Min(ind => ind.Fitness())); max.Add(population.Max(ind => ind.Fitness())); generations.Add(gen); // Сохраняем лучшего индивида Hof(); // Выводим статистику output.RefreshListBox( avg[avg.Count() - 1], generations[generations.Count() - 1], min[min.Count() - 1], max[max.Count() - 1]); output.Refresh(); output.DrawGraph(generations, avg, max, min); } }
Содержание архива
Страниц отчета - 25
- количество страниц в отчете - 25
- язык программирования C# и среда разработки исходного кода Microsof Visual Studio 2022
Shingomed