Оптимизация поездки по Европе генетические алгоритмы и Google Maps API решают задачу коммивояжера

Генетические алгоритмы и Google Maps API оптимизируют поездку по Европе, решая задачу коммивояжера.

Источник: unsplash.com

Помните это чувство после просмотра фильмов, таких как “Евротур”, где персонажи мчатся через живописные европейские города в приключение жизни? Это завораживает. Однако реальность немедленно напоминает нам: организация путешествия через множество мест – непростая задача. Но вот интересный поворот – вооружившись программированием и пониманием генетических алгоритмов, я приступил к разработке решения. Представьте, что вы можете оптимизировать сложные маршруты, охватывающие десятки мест, с высокой точностью. Именно здесь мир науки о данных пересекается с искусством планирования приключений. В этой статье я представляю алгоритмический скрипт, который элегантно решает сложную проблему коммивояжера (TSP), обещая помочь в планировании путешествий и улучшить наше понимание оптимизации в науке о данных.

Чтение этой статьи позволит вам ясно понять, как синергия между Python, Google Maps API и генетическими алгоритмами открывает возможности для решения нетривиальных задач на основе данных.

Понимание проблемы коммивояжера

Начало путешествия часто вызывает чувство приключения, но когда мы размышляем о сложностях путешествия, волнение может сопровождаться логистическими проблемами. Одной из таких проблем, которая привлекла внимание математиков, ученых-компьютерщиков и экспертов по логистике на протяжении десятилетий, является проблема коммивояжера (TSP). В основе TSP лежит кажущийся простым вопрос: при заданном списке городов и расстояниях между ними, каков самый короткий возможный маршрут, позволяющий коммивояжеру посетить каждый город ровно один раз и вернуться в исходную точку? Хотя формулировка проблемы кажется простой, ее последствия выходят далеко за ее поверхностную простоту.

В мире оптимизации и логистики TSP – это не просто теоретическая любопытность; она имеет огромное практическое значение. Рассмотрим, например, службы доставки, где минимизация расстояний переводится непосредственно на снижение затрат на топливо и более быстрое обслуживание.

Задача TSP обладает глубоким уровнем сложности. Комбинаторная природа TSP возникает из экспоненциального роста потенциальных решений с увеличением количества городов. Количество возможных маршрутов быстро возрастает, что делает традиционные методы перебора нецелесообразными для более крупных экземпляров. Количество возможных маршрутов равно

где n представляет собой количество городов – факториальный взрыв, который быстро становится ошеломляющим. При всего лишь 50 городах количество возможных маршрутов составляет 3*10⁶², что примерно равно числу атомов в Млечном Пути.

TSP является квинтэссенцией захватывающего пересечения между математикой, компьютерной наукой и реальными логистическими проблемами. С увеличением числа городов требуются инновационные стратегии для нахождения кратчайшего пути, выходящие за рамки традиционных вычислительных подходов.

Стремление к эффективным решениям TSP побудило исследователей исследовать различные методологии. Среди них генетические алгоритмы, класс оптимизационных техник, вдохновленных процессом естественного отбора. Генетические алгоритмы отлично справляются с навигацией в сложных пространствах решений, что делает их естественным выбором для решения проблем, таких как TSP, где методы перебора быстро становятся нецелесообразными с увеличением числа городов.

Целью этой статьи является изучение союза двух областей – проблемы коммивояжера и генетических алгоритмов. В частности, мы углубимся в практическое применение: скрипт на Python, разработанный для использования силы генетических алгоритмов для решения TSP. Наше исследование покажет, как этот алгоритмический симбиоз может улучшить планирование путешествий, логистику и оптимизацию задач в различных отраслях. Понимая внутреннюю работу нашего решения на основе генетических алгоритмов, мир науки о данных и алгоритмического инноваций сойдутся, обещая новые идеи и эффективные пути даже в самых сложных маршрутах.

Введение в генетические алгоритмы

В основе генетического алгоритма (GA) лежит эвристический метод поиска, вдохновленный элегантным процессом естественного отбора и эволюции.

Вдохновение генетических алгоритмов уходит корнями в теорию эволюции Чарльза Дарвина. ГА имитируют процесс естественного отбора, итеративно эволюционируя популяцию потенциальных решений. В этом цифровом “плавильном котле” выживают и размножаются решения, проявляющие благоприятные свойства, передавая свои “гены” следующему поколению. Это поколения эволюции продолжаются до достижения оптимального или близкого к оптимальному решения.

Генетические алгоритмы характеризуются четырьмя основными компонентами:

  1. Отбор: Как и в природе, механизмы отбора идентифицируют и предпочитают решения с более высокой приспособленностью, отражая концепцию “выживает сильнейший”.
  2. Скрещивание: Решения, или “хромосомы”, обмениваются генетическим материалом, чтобы создавать потомство с смесью признаков их родителей.
  3. Мутация: Чтобы внести разнообразие и предотвратить преждевременную сходимость к субоптимальным решениям, генетические алгоритмы включают оператор мутации. Эта операция случайным образом изменяет определенные элементы решения, аналогично генетическим мутациям в природе.
  4. Оценка приспособленности: Определение приспособленности каждого решения, которая количественно оценивает его производительность в решаемой задаче. Функция приспособленности руководит процессом отбора, присваивая более высокую вероятность размножения превосходным решениям.

Генетические алгоритмы обладают впечатляющей универсальностью при решении задач оптимизации. Их способность исследовать пространства решений в нелинейном, многомерном виде делает их отлично подходящими для сложных реальных задач. Будь то оптимизация сложных инженерных конструкций, тонкая настройка параметров нейронных сетей или, как мы скоро увидим, решение задачи коммивояжера, генетические алгоритмы превосходят традиционные алгоритмы в сценариях, где они не справляются.

Применение генетических алгоритмов к задаче коммивояжера

Теперь давайте погрузимся в применение генетических алгоритмов (ГА) для решения задачи коммивояжера (TSP).

В основе своей ГА подходят к TSP, рассматривая каждый потенциальный маршрут как отдельного представителя в популяции. Эта популяция маршрутов эволюционирует на протяжении поколений, при этом каждый маршрут представляет собой уникальный маршрут для коммивояжера.

Для облегчения этой генетической эволюции мы представляем каждый маршрут в виде хромосомы – последовательности городов, определяющих порядок посещения. Например:

Image by author.

Основная задача – найти оптимальную хромосому, последовательность, которая минимизирует общее расстояние путешествия. Приспособленность каждой хромосомы определяется путем оценки общего расстояния, которое она преодолевает при посещении городов в указанном порядке. Меньшее расстояние соответствует более высокой приспособленности, отражая цель поиска кратчайшего пути.

Реализация на Python

Теперь давайте рассмотрим пошаговую высокоуровневую реализацию сценария на Python, предназначенного для решения задачи коммивояжера. Полный код доступен в моем репозитории на GitHub.

Получение данных

Первым шагом является выбор пунктов назначения. В этом примере я выбрал 50 самых посещаемых городов в Европе. После определения пунктов назначения мне понадобилось расстояние и время путешествия между каждой парой городов. Для этого типа запроса API карт Google является передовым решением. После настройки аккаунта здесь вы можете запросить персональный ключ API, необходимый для аутентификации.

Запросы к API карт Google отправляются следующим образом:

Инициализация

Процесс начинается с создания начальной популяции маршрутов. Эти маршруты обычно создаются случайным образом или с использованием эвристического метода.

Оценка приспособленности и отбор

На каждом шаге, после создания потомков и мутации некоторых маршрутов, рассчитывается общее расстояние для каждого маршрута, чтобы оценить их приспособленность. Этот шаг гарантирует, что алгоритм сохраняет свое внимание на выборе кратчайших путей.

В духе естественного отбора маршруты выбираются для размножения на основе их приспособленности. Маршруты с более коротким общим расстоянием – ближе к оптимальному решению – имеют большую вероятность выбора, что позволяет особям с преимущественными свойствами иметь больше шансов на размножение.

Скрещивание и мутация

Для особенностей этой проблемы классическая операция скрещивания не выполняется. Я выбрал два вида мутации:

  1. Мутации с одной точкой: Чтобы сохранить разнообразие и внести новые решения, алгоритм вносит небольшие случайные изменения в выбранные маршруты. Это эмулирует генетические мутации, внося незначительные изменения.
  2. Мутации-скрещивания: Мутирует решение путем разделения случайного подмножества его генома и добавления его в другую позицию. Вспомним биологические термины, это своего рода бесполое размножение.

Итерация

Вышеуказанные шаги повторяются в течение определенного числа поколений, позволяя популяции эволюционировать со временем. Каждая итерация приближает алгоритм к оптимальному или почти оптимальному решению.

Алгоритм продолжает итерацию до выполнения критерия завершения. В данном случае критерием завершения является достижение предопределенного числа поколений.

Результаты и заключение

В этом исследовании я использовал генетический алгоритм с размером популяции 200 особей и запустил его на 1000 поколений для решения задачи коммивояжера с 50 городами. Путь от начального поколения до конечного результата показывает замечательную эффективность генетического алгоритма.

Изначально, в нулевом поколении, появилось первое решение с пройденным расстоянием 70 755 километров:

('София, Болгария', 'Ницца, Франция', ..., 'Неаполь, Италия', 'Люксембург, Люксембург')

Это начальное решение, как и ожидалось, представляет собой случайное расположение городов, указывающее на начальную точку алгоритма. Однако, по мере прохождения ГА через последующие поколения, мы наблюдали замечательное изменение качества решений.

После 1000 поколений ГА нашел свои маршруты. Конечным решением стал путь с пройденным расстоянием 21 345 километров — значительное уменьшение дистанции по сравнению с начальным случайным решением. Это замечательное улучшение почти на 49 410 километров подчеркивает эффективность ГА в оптимизации сложных маршрутов, таких как задача коммивояжера.

Я провел 4 испытания, меняя размер популяции. Лучшие результаты получены с более крупной популяцией, но время вычислений, очевидно, было дольше. Мы можем видеть, что для каждого испытания значение приспособленности быстро уменьшается в начальных итерациях и устанавливается на плато позже. Это типичное поведение сходящегося алгоритма.

Изображение автора.

Хотя задача коммивояжера остается NP-трудной проблемой, что означает, что поиск абсолютно оптимального решения может быть вычислительно сложным для больших экземпляров, способность ГА приближаться к почти оптимальным решениям оказывается бесценной в практических приложениях. Это достижение открывает двери к более эффективному планированию путешествий, оптимизации логистики и усовершенствованию оптимизации в различных отраслях. Этот эксперимент подчеркивает симбиотическую связь между наукой о данных и инновационными алгоритмами. Он подчеркивает, как эволюционные вычисления, вдохновленные механизмами отбора в природе, могут элегантно решать сложные проблемы в реальном мире.

Ссылки

[1]: Три-целевая оптимальная установка ПЭД включая точную оценку состояния: случай распределительных сетей[2]: Анализ производительности операторов мутации для решения задачи коммивояжера[3]: Вероятностная модель с эволюционной оптимизацией для когнитивной диагностики[4]: Симулированный бинарный кроссовер для непрерывного пространства поиска[5]: Новый оператор мутации для генетических алгоритмов с вещественными числами[6]: Вычисление оптимального автомобильного путешествия по США.