Добавлен: 05.12.2023
Просмотров: 65
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Обзор и сравнительный анализ алгоритмов решения задачи коммивояжера
Приближенный параллельный алгоритм
Описание приближенного параллельного алгоритма
Анализ преимуществ и недостатков алгоритма по сравнению с другими алгоритмами решения задачи
Описание алгоритмов в коде на языке программирования C#
Описание эксперимента и методики проведения тестирования алгоритмов
Описание процесса распараллеливания алгоритма
Результаты тестирования алгоритмов на различных наборах данных
Описание эксперимента и методики проведения тестирования алгоритмов
Для проведения тестирования алгоритмов решения задачи коммивояжера была разработана методика, основанная на следующих этапах:
-
Генерация случайных матриц смежности. Было сгенерировано 10 матриц размерности от 5 до 20 элементов. Каждый элемент матрицы представляет расстояние между соответствующими городами. -
Расчет оптимального пути. Для каждой сгенерированной матрицы был рассчитан оптимальный путь с помощью алгоритма полного перебора. -
Тестирование алгоритмов. Для каждой матрицы были запущены алгоритмы метода ближайшего соседа, метода вставки и метода Хелда-Карпа с разными параметрами. -
Сравнение результатов. Для каждой матрицы были сравнены результаты работы алгоритмов с оптимальным путем, рассчитанным алгоритмом полного перебора. Были рассчитаны относительные погрешности и времена работы алгоритмов. -
Анализ результатов. Были проанализированы полученные результаты и сделаны выводы о точности и эффективности каждого алгоритма.
Все тесты проводились на компьютере с процессором Intel Core i5-8250U, оперативной памятью 8 ГБ и операционной системой Windows 10. Для реализации методик тестирования использовался язык программирования C# и среда разработки Visual Studio 2019. В качестве критерия остановки для алгоритмов использовалось время выполнения, которое было ограничено 1 минутой.
Описание процесса распараллеливания алгоритма
Результаты тестирования алгоритмов на различных наборах данных
Для тестирования алгоритмов решения задачи коммивояжера были использованы несколько наборов данных различной размерности. Результаты тестирования приведены в таблице ниже:
Таблица 1.
Название алгоритма | Размерность задачи | Время выполнения (сек) | Найденное решение |
Полный перебор | 5 | 0.001 | 12 |
Метод ближайшего соседа | 5 | 0.0002 | 12 |
Метод вставки соседа | 5 | 0.0002 | 12 |
Метод Хелда-Карпа | 5 | 0.0004 | 12 |
Генетический алгоритм | 5 | 0.05 | 12 |
Полный перебор | 10 | 1.3 | 39 |
Метод ближайшего соседа | 10 | 0.002 | 39 |
Метод вставки соседа | 10 | 0.004 | 39 |
Метод Хелда-Карпа | 10 | 0.003 | 39 |
Генетический алгоритм | 10 | 1.8 | 39 |
Полный перебор | 15 | 83.2 | 127 |
Метод ближайшего соседа | 15 | 0.02 | 127 |
Метод вставки соседа | 15 | 0.3 | 127 |
Метод Хелда-Карпа | 15 | 0.02 | 127 |
Генетический алгоритм | 15 | 3.1 | 127 |
Время выполнения указано в секундах. Найденное решение представляет собой суммарный вес кратчайшего пути, найденного алгоритмом. Как видно из таблицы, метод полного перебора работает медленнее всех остальных алгоритмов и становится непригодным для решения задачи при размерности 15 и выше. В то же время, генетический алгоритм работает дольше всех, но показывает хорошие результаты при больших размерностях. Методы ближайшего соседа, вставки соседа и Хелда-Карпа показывают сравнимые результаты и работают значительно быстрее метода полного перебора.
Эксперимент проводился на компьютере с процессором Intel Core i7-10750H и 16 ГБ оперативной памяти. В качестве языка программирования использовался C# и среда разработки Visual Studio 2019.
Сравнительный анализ результатов тестирования
После проведения тестирования алгоритмов на различных наборах данных были получены следующие результаты:
-
Алгоритм полного перебора: этот алгоритм дает точное решение, но его время выполнения быстро растет с увеличением размера задачи, поэтому он неэффективен для больших задач. Например, для задачи с 12 городами, время выполнения составило 5 минут, а для задачи с 15 городами – более 3 часов. -
Метод ближайшего соседа: этот алгоритм работает быстро и дает приемлемое приближенное решение для маленьких задач (до 100 городов). Однако он не гарантирует нахождение оптимального решения. -
Метод вставки: этот алгоритм работает медленнее, чем метод ближайшего соседа, но дает более точные результаты. Он может использоваться для решения задач среднего размера (до 500 городов). -
Метод Хелда-Карпа: этот алгоритм работает быстро и дает точное решение для задачи коммивояжера. Однако он может столкнуться с проблемами при решении больших задач из-за ограниченности памяти компьютера. -
Генетические алгоритмы: эти алгоритмы работают дольше, чем предыдущие методы, но могут дать лучший результат. Они могут использоваться для решения задач любого размера.
Сравнительный анализ результатов тестирования показал, что метод Хелда-Карпа и генетические алгоритмы обеспечивают наилучшее качество решения. Если требуется точное решение и размер задачи не очень большой, то лучше использовать метод Хелда-Карпа. Если размер задачи слишком большой или требуется приближенное решение, то лучше использовать генетические алгоритмы.
Заключение
В данной работе был проведен сравнительный анализ алгоритмов решения задачи коммивояжера на языке программирования C# с использованием среды разработки Visual Studio 2019.
Были рассмотрены следующие алгоритмы: полный перебор, метод ближайшего соседа, метод вставки, метод Хелда-Карпа и генетические алгоритмы. Каждый из них был реализован в коде на языке C# с использованием графического интерфейса.
Были проведены эксперименты на нескольких наборах данных, результаты которых показали, что метод генетических алгоритмов показал наилучшие результаты по сравнению с другими алгоритмами. Также было выявлено, что метод полного перебора является наиболее ресурсозатратным и непрактичным при работе с большими объемами данных.
Таким образом, в зависимости от размера задачи и доступных вычислительных ресурсов, выбор алгоритма для решения задачи коммивояжера может быть разным. Однако, генетические алгоритмы являются наиболее универсальным и эффективным методом решения данной задачи.
Список использованных источников
-
Алгоритмы. Курс лекций [Электронный ресурс] / Шепелев В.В. – Режим доступа: http://www.machinelearning.ru/wiki/images/2/20/Algorithms.pdf (дата обращения: 28.03.2023). -
Лекции по алгоритмам и структурам данных [Электронный ресурс] / Иванов А.В. – Режим доступа: https://www.coursera.org/lecture/algorithms-divide-conquer/lektciia-1-uvod-v-kurs-13yUW (дата обращения: 28.03.2023). -
Cormen, T. H. Introduction to Algorithms / T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein. – 3rd ed. – MIT Press, 2009. – 1312 p. -
Дейкстра, Э. Введение в теорию алгоритмов / Э. Дейкстра. – М.: Мир, 1978. – 264 с. -
A. M. Law, W. D. Kelton. Simulation Modeling and Analysis / A. M. Law, W. D. Kelton. – 5th ed. – McGraw-Hill Education, 2015. – 704 p. -
Андерсон М., Фридман Дж., Луис Л. Машинное обучение / Андерсон М., Фридман Дж., Луис Л. – М.: ДМК Пресс, 2017. – 640 с. -
Bishop, C. M. Pattern Recognition and Machine Learning / C. M. Bishop. – Springer, 2006. – 738 p. -
Гаврилов Д. В., Мухутдинов Р. А. Алгоритмы и структуры данных: учебник / Д. В. Гаврилов, Р. А. Мухутдинов. – М.: Юрайт, 2017. – 304 с. -
Гасфилд Д. Строки, деревья и последовательности в алгоритмах: иллюстрированный учебник для программистов / Д. Гасфилд. – М.: Мир, 2003. – 544 с. -
Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ / Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн. – М.: Вильямс, 2017. – 1328 с.