Задача коммивояжёра(алгоритм муравья)
Изучение муравьиного алгоритма для решения задачи коммивояжера, анализ влияния параметров алгоритма на время его выполнения. Постановка задачи коммивояжера. Муравьиный алгоритм. Псевдокод алгоритма. Средства реализации алгоритма. Листинг программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 12.06.2020 |
Размер файла | 831,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)»
(МГТУ им. Н.Э. Баумана)
Анализ алгоритмов
Лабораторная работа №6
Отчёт на тему:
«Задача коммивояжёра»
Москва, 2019
Оглавление
алгоритм муравьиный коммивояжер задача
Введение
1. Аналитическая часть
1.1 Постановка задачи коммивояжера
1.2 Муравьиный алгоритм
2. Конструкторская часть
2.2 Псевдокод алгоритма
3. Технологическая часть
3.1 Средства реализации
3.2 Листинг кода
4. Экспериментальная часть
4.1 Тестирование алгоритма
Заключение
Список литературы
Введение
Цель работы: изучение муравьиного алгоритма для решения задачи коммивояжера, анализ влияния параметров алгоритма на время его выполнения.
1. Аналитическая часть
В данном разделе приведено описание алгоритма муравья
1.1 Постановка задачи коммивояжера
Дано:
- множество городов, матрица - попарные расстояния между городами, .
Найти:
контур минимальной длины, цикл, проходящий через каждую вершину один раз и имеющий минимальный вес.
Данная задача может быть решена полным перебором всех вариантом. Но с увеличением числа городов количество маршрутов очень быстро возрастает, так как для n городов есть n! возможных маршрутов. Даже если учесть, что для одного контура есть два возможных направления и искать только одно из них, количество переборов снижается только до вариантов.
1.2 Муравьиный алгоритм
Муравьиный алгоритм - один из эффективных алгоритмов нахождения решений задачи коммивояжера. Алгоритм является жадным эвристическим алгоритмом: алгоритмом, принимающим локально оптимальные решения для каждой итерации.
Алгоритм основывается на поведении муравьев в поиске кратчайшего пути от колонии до источника питания. Моделирование поведения муравья связано с распределением феромонов на пути - на ребре в данном случае, количество феромона пропорционально длине маршрута. Таким образом, чем короче найденный маршрут, тем больше будет на нем феромонов. Чтобы алгоритм не сводился к единственному варианту, вводится обратная связь - «испарение» феромонов с пути со временем.
Муравьиный алгоритм использует три основных понятия - память муравья, видимость и феромонный след.
Память муравья - список всех вершин, которые он уже посетил. Так же есть список Ji, k- список вершин, которые нужно посетить i-тому муравью, находящемуся в вершине k.
Видимость - обратная расстоянию величина, , где Di,j- расстояние между вершинами iи j.
Феромонный след - «опыт» муравьев, коэффициент вероятности того, что муравей захочет перейти из вершины iв j - .
Вероятность перехода муравья k в вершинуj из вершиныi:
(1)
Если б = 0, то алгоритм становится «жадным», если в = 0, то муравьи оказываются «слепы» и опираются только на феромонный след.
В конце каждой итерации высчитывается общая протяженность маршрута и обнуляется память муравьев.
Обновление феромонов происходит по формуле 2:
(2)
p-скорость испарения феромона
2. Конструкторская часть
2.1 Схема алгоритма
Рисунок 1.1 - Схема работы муравьиного алгоритма
2.2 Псевдокод алгоритма
1. Ввод матрицы расстояний D
2. Инициализация параметров алгоритма
3. Инициализация рёбер - присвоение видимости зi,j и начальной концентрации феромона
4. Размещение муравьёв
5. Выбор начального кратчайшего маршрута и определение L*
6. Цикл по времени жизни колонии t=1, max t
7. Цикл по всем муравьям k=1,m
8. Построить маршрут Tk (t) рассчитать длину Lk (t)
9. Конец цикла по муравьям
10. Проверка всех L (t) на лучшее решение по сравнению с Lk *
11. В случае если решение L (t) лучше, обновить L* и Tk *
12. Цикл по всем рёбрам графа
13. Обновить следы феромона на ребрах
14. Конец цикла по рёбрам
15. Конец цикла по времени
16. Вывести кратчайший маршрут T* и его длину L*
3. Технологическая часть
В данном разделе представлена реализация алгоритмов, указан язык программирования, а также необходимые модули.
3.1 Средства реализации
Для выполнения данной лабораторной работы использовался язык Python 3.7.1 в среде Pycharm. Замены времени проводились с использованием функции process_time_ns, входящей в библиотеку timePython версии 3.7.
3.2 Листинг кода
Листинг 1.1 - Реализация муравьиного алгоритма
defaco(m, e, d, t_max, alpha, beta, p, q):
nue = 1 / d
teta = np.random.sample((m, m))
T_min = None
L_min = None
t = 0
while t <t_max:
teta_k = np.zeros((m, m))
for k in range(m):
Tk = [k]
Lk = 0
i = k
whilelen(Tk) != m:
J = [r for r in range(m)]
for c in Tk:
J.remove(c)
P = [0 for alpha in J]
for j in J:
if d[i][j] != 0:
buf = sum((teta[i][l] ** alpha) * (nue[i][l] ** beta) for l in J)
P[J.index(j)] = (teta[i][j] ** alpha) * (nue[i][j] ** beta) / buf
else:
P[J.index(j)] = 0
Pmax = max(P)
ifPmax == 0:
break
index = P.index(Pmax)
Tk.append(J[index])
Lk += d[i][J[index]]
i = J.pop(index)
ifL_min is None or (Lk + d[Tk[0]][Tk[-1]]) <L_min:
L_min = Lk + d[Tk[0]][Tk[-1]]
T_min = Tk
for g in range(len(Tk) - 1):
alpha= Tk[g]
betha = Tk[g + 1]
teta_k[alpha][betha] += q / Lk
teta_e = (e * q / L_min) if L_min else 0
teta = (1 - p) * teta + teta_k + teta_e
t += 1
returnL_min
4. Экспериментальная часть
В данном разделе будут произведены замеры времени работы алгоритма. Для исследования скоростных характеристик был использован компьютер на базе процессора IntelCore i7-6600U, содержащий 8 гигабайт оперативной памяти. Модуль тестирования запускался с жестокого диска под операционной системой Windows 7. Жесткий диск имел среднюю скорость передачи данных при чтении 2629 Мбайт/с и 798 Мбайт/с при записи.
4.1 Тестирование алгоритма
Для проверки значимости Q- параметра, имеющего значение порядка длины оптимального пути, зафиксируем значения б, в и pи будем изменять Qв диапазоне [0, 50] с шагом 1.
Рисунок 4.1 - Влияние параметра Q на время работы алгоритма
Для проверки значимости б, зафиксируем Q = 1, в = 0 и p= 0.5и будем изменять б в диапазоне [0, 5] с шагом 0.5.
Рисунок 4.2 - Влияние параметра б на время работы алгоритма
Для проверки значимости в, зафиксируем Q = 1, б = 0 и p= 0.5и будем изменять вв диапазоне [0, 5] с шагом 0.5.
Рисунок 4.3 - Влияние параметра в на время работы алгоритма
Как видно из рисунков 4.2 и 4.3 у параметров б и в есть «нежелательное» значение, равное двум, на котором алгоритм работает неэффективно.
Для проверки значимости e, зафиксируем Q = 1, б = 1, в = 1 и p= 0.5и будем изменятьeв диапазоне [0, 5] с шагом 0.5.
Рисунок 4.4 - Влияние параметра e на время работы алгоритма
Как видно из рисунка 4.4, лучшим значением параметра eявляется единица, т. е. оптимальной ситуацией является та, где в колонии есть один «элитный» муравей.
Для проверки значимости p, зафиксируем Q = 1, б = 1, в = 1 и e=1 и будем изменятьeв диапазоне [0, 1] с шагом 0.1.
Рисунок 4.5 - Влияние параметра pна время работы алгоритма
Как видно из рисунка 4.5, лучшим значением параметра pявляется 0.3.
Заключение
В данной работе был изучен муравьиный алгоритм для решения задачи коммивояжера и проанализировано влияние параметров алгоритма на время его выполнения.
Муравьиный алгоритм - один из эффективных алгоритмов нахождения решений задачи коммивояжера. Качество получаемых решений во многом зависит от настроечных параметров в вероятностнопропорциональном правиле выбора пути на основе текущего количества феромона и от параметров правил откладывания и испарения феромона. Динамическая адаптационная настройка этих параметров может способствовать получению лучших решений. Немаловажную роль играет и начальное распределение феромона, а также выбор условно оптимального решения на шаге инициализации.
Список литературы
[1] Штовба С.Д. Муравьиные алгоритмы // Exponenta Pro. Математика в приложениях, 2003, №4, с.70-75.
[2] МакКоннелл Дж. Основы современных алгоритмов. - М.: Техносфера, 2004. - 368 с.
[3]Программа на которой была выполнена лабораторная https://www.python.org/
Размещено на Allbest.ru
...Подобные документы
Моделирование передвижения муравьев. Метод ветвей и границ, ближайшего соседа. Ограничения, накладываемые на агента в стандартной постановке задачи коммивояжера. Использование графа видимости в алгоритме муравья. Структура данных алгоритма муравья.
дипломная работа [1,7 M], добавлен 07.02.2013Задачи, решаемые методом динамического программирования. Основные этапы нахождения деревянного алгоритма решения задачи. Выполнение алгоритма Прима. Построение Эйлерового цикла. Решение задач средствами Excel. Алгоритм основной программы - Derevo.
курсовая работа [586,3 K], добавлен 04.04.2015Сравнение результатов работы генетического алгоритма по решению "несимметричной незамкнутой задачи коммивояжера" с результатами работы алгоритма динамического программирования по параметрам - время работы, точность результата и объем используемой памяти.
курсовая работа [65,3 K], добавлен 16.04.2014Оптимизация решения задачи с помощью алгоритма отжига. Анализ теории оптимизации как целевой функции. Метод градиентного спуска. Переменные и описание алгоритма отжига. Представление задачи коммивояжера через граф. Сведение задачи к переменным и решение.
курсовая работа [784,0 K], добавлен 21.05.2015Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Этапы работы генетического алгоритма, область его применения. Структура данных, генерация первоначальной популяции. Алгоритм кроссинговера - поиск локальных оптимумов. Селекция особей в популяции. Техническое описание программы и руководство пользователя.
реферат [1014,2 K], добавлен 14.01.2016Математическая модель решения задачи коммивояжера. Поиск кратчайшего замкнутого пути обхода нескольких городов и возвращения в исходную точку. Описание программы и результатов ее тестирования. Основная форма программы после вывода конечных данных.
курсовая работа [603,3 K], добавлен 21.10.2012Описание генетических алгоритмов. Применение генетического алгоритма для решения задачи коммивояжера. Постановка задачи безусловной оптимизации. Изучение распространения генетических алгоритмов на модель с несколькими взаимодействующими популяциями.
дипломная работа [979,1 K], добавлен 30.05.2015Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014Описание принципа работы генетического алгоритма, проверка его работы на функции согласно варианту на основе готовой программы. Основные параметры генетического алгоритма, его структура и содержание. Способы реализации алгоритма и его компонентов.
лабораторная работа [20,2 K], добавлен 03.12.2014Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.
контрольная работа [150,4 K], добавлен 03.05.2014Методы решения задачи о ранце. Алгоритм неявного лексикографического перебора. Разработка структуры данных, реализация алгоритма с её использованием, программная реализация. Проведение тестовой проверки. Входной и выходной файл, листинг программы.
курсовая работа [408,8 K], добавлен 22.10.2012Разработка алгоритма, выполняющего поиск наилучшего решения на каждый ход в игре "крестики-нолики" (используя минимальный алгоритм). Обоснование выбора программных средств для решения задачи. Блок-схема интеллектуального алгоритма реализации программы.
контрольная работа [380,0 K], добавлен 28.04.2014Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.
курсовая работа [446,0 K], добавлен 19.06.2014Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Содержательная и формальная (математическая) постановка задачи. Разработка алгоритма решения задачи. Структуры программы и алгоритмы программных модулей, их описание. Решение задачи на конкретном примере. Разработка системы тестов и отладка программы.
курсовая работа [882,1 K], добавлен 24.11.2014Описание решения задачи, ее постановка, общий подход к решению. Представление исходных данных, условий задачи и целей ее решения. Составление алгоритма решения поставленной задачи. Написание программного обеспечения и тестирование конечного продукта.
курсовая работа [1,1 M], добавлен 03.07.2011Модификация алгоритма RPC таким образом, чтобы он не требовал входного параметра, но сохранил свою гибкость при решении задачи нахождения максимальной клики для разных графов. Метод ветвей и границ. Построение функции-классификатора. Листинг алгоритма.
курсовая работа [197,8 K], добавлен 06.10.2016Выполнение арифметических операций, этапы решения задач с помощью ЭВМ - постановка задачи, составление алгоритма решения, программная реализация алгоритма в среде Qbasic. Решение систем линейных уравнений по формулам Крамера. Графический режим Qbasic.
курсовая работа [101,7 K], добавлен 29.09.2009Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.
курсовая работа [69,8 K], добавлен 13.02.2012