МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ.ПРОФ.М.А.БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет: «Институт магистратуры»
Кафедра: «Систем автоматизации и робототехники»
Направление подготовки: |
Автоматизация технологических процессов и производств |
Направленность (профиль): |
Интеллектуальные технологии в автоматизации |
Курсовая работа
по дисциплине:
Методы и модели искусственного интеллекта в управлении техническими системами
|
на тему:
Генетический алгоритм для решения задачи коммивояжера
Вариант 4
-
Выполнили студенты группы:
дата, подпись
Фамилия И. О.
Принял к.т.н., доцент
Верхова Г.В..
дата, подпись
Фамилия И. О.
Оглавление
Задание 3
Введение 3
1. Математическая модель и описание алгоритма 4
1.1. Модель хромосомы 4
1.2. Модель оператора мутации 4
1.3. Модель оператора кроссинговера 4
1.4. Модель фитнес функции 4
1.5. Описание алгоритма 5
2. Диаграмма классов 6
2.1. Блок-схема генетического алгоритма 6
2.2. Блок-схема оператора селекции 6
3. Спецификация классов 7
3.1. Спецификация Program.cs 7
3.2. Спецификация Population.cs 8
3.3. Спецификация Individual.cs 8
3.4. Спецификация Gen.cs 9
3.5. Спецификация EvolutionManager.cs 10
3.6. Спецификация Chromosome.cs 10
3.7. Спецификация City.cs 11
4. Исходный код программы 11
4.1. Код Program.cs 11
4.2. Код Population.cs 13
4.3. Код Individual.cs 14
4.4. Код Gen.cs 16
4.5. Код EvolutionManager.cs 16
4.6. Код Chromosome.cs 17
4.7. Код City.cs 18
5. Результаты выполнения программы 19
5.1. Выбор эксперимента 19
5.2. Выбор количества городов 19
5.3. Вывод координат городов 19
5.4. Вывод расстояния между городами 20
5.5. Вывод работы генетического алгоритма 20
5.6. Вывод статистики 21
Заключение 22
Список используемых источников 23
Задание
Разработать генетический алгоритм для решения задачи коммивояжера. Получить решения для 8, 16 и 32, 100 и 1000 городов. Эксперимент 1. Города сгенерировать, задав случайные значения координат X и Y в диапазоне от 0 до 1000. Проанализировать полученный результат. Эксперимент 2. Исследовать решение задачи с помощью созданного генетического алгоритма для случая, когда города расположены на одной линии (Y = 0, X = 0, 10, 20, 30, 40 и т.д.), количество городов равное 1000. Расстояние между городами находим по формуле (1):
Введение
Целью выполнения курсового проекта является приобретение навыков по разработке моделей и алгоритмов искусственного интеллекта. Разработанные модели и алгоритмы реализуются в виде программы на языке программирования C#.
Актуальность проблемы данного курсового проекта связана с растущей потребностью в разработке и внедрении систем контроля времени доставки в различных сферах человеческой деятельности. Например, в промышленности, медицине, бытовой. Обеспечение стабильной и точной доставки является ключевым аспектом многих технологических, медицинских и бытовых служб доставки. Кроме того, в условиях растущих требований к энергоэффективности и автоматизации процессов возрастает значимость разработки эффективных и надежных систем расчета оптимального пути. Таким образом, создание, расчет и моделирование системы нахождения самого оптимального пути имеет огромное практическое значение и актуальность в современном мире.
1. Математическая модель и описание алгоритма
1.1. Модель хромосомы
Каждая особь (Individual) представляет собой маршрут, кодируемый перестановкой индексов городов:
Размер хромосомы π равен числу городов N также обеспечивается без дублирующийся цикл обхода [1].
1.2. Модель оператора мутации
Альтернативная случайная мутация (Alternate Random Mutation). Мутация у отдельной особи происходит с вероятностью 0,005 – 0,1. Выбирается случайным образом ген, и в нем генерируется случайное смещение Δ ϵ [xmin/5, xmax/5] с равномерным распределением вероятности, если после смещения текущее значение выходит за пределы интервала, то округляем до xmin или xmax [2].
1.3. Модель оператора кроссинговера
Оператор кроссинговера BLX‑a‑b.
Для i-го гена вычисляется d = |x - y|. Если x ≤ y, интервал для потомка [x - a*d, y + b*d], иначе [y - b*d, x + a*d]. Для каждого потомка генерируется случайное значение в этом интервале [3].
1.4. Модель фитнес функции
Фитнес функция для нахождения минимального пути:
где d(i,j) - расстояние между городами находим по формуле (1):
1.5. Описание алгоритма
Входные данные:
1. cityList (List<City>) – список городов. Класс City хранит Id (номер города), координаты X, Y и предоставляет метод Distance(City a, City b) для вычисления расстояния по формуле 1. Порядок в списке соответствует номерам городов от 1 до N–1.
2. populationSize (int) – число особей (маршрутов) в популяции ГА. В коде по умолчанию равно 20.
3. maxGenerations (int) – максимальное число поколений для ГА. В коде равно 100.
4. crossoverProb (double) – вероятность выполнения кроссовера при создании нового поколения. В коде по умолчанию 0.1.
5. mutationProb (double) – вероятность мутации потомка. В коде равно 0.05.
6. numberOfRuns (int) – число повторных запусков ГА для статистики. В коде равно 10.
Выходные данные:
1. BestIndividual (Individual) – лучший найденный маршрут. Хранится в EvolutionManager.BestIndividual.
2. Tour (List<int>) – последовательность индексов городов в маршруте, начиная и заканчивая в городе с Id=0.
3. TotalDistance (double) – общая длина лучшего маршрута. Расчитывается как FitnessValue у особи, метод Evaluate() суммирует все сегменты, включая возвращение в старт.
4. Статистика – минимальное, среднее и максимальное время работы, минимальное найденное расстояние.
Промежуточные данные:
1. Population.Individuals (List<Individual>) – список маршрутов текущего поколения.
2. Individual.Tour – текущая перестановка городов.
3. Individual.FitnessValue – длина маршрута.
4. generation (int) – номер текущего поколения в пределах одного запуска.
2. Диаграмма классов
2.1. Блок-схема генетического алгоритма
Рис.1 — Блок-схема генетического алгоритма
2.2. Блок-схема оператора селекции
Рис.2 — Блок-схема оператора селекции
3. Спецификация классов
3.1. Спецификация Program.cs
Назначение:
1. Управление запуском экспериментов генетического алгоритма
2. Ввод/вывод данных
3. Печать списка городов, расстояний и оптимальных маршрутов
4. Сбор статистики по нескольким запускам
Методы:
1. Static void Main(string[] args) — точка входа, реализует выбор эксперимента, генерацию городов, параметры GA, многократный запуск и вывод результатов
2. static List<City> GenerateRandomCities(int n) — генерация списка городов с случайными координатами
3. static void PrintCities(List<City> cities) — вывод координат городов и матрицы расстояний (при небольшом числе)
4. static void PrintPath(List<int> tour, List<City> cities) — вывод пошагового маршрута и расстояний между городами
