Постановка задачи
Цель дипломной работы - разработать алгоритм для составления учебного расписания, используя генетические алгоритмы.
Для решения данной задачи необходимо выполнить следующие задачи:
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

Телеграм
-