Коммивояжер (ТСП) линейных маршрутов, снегоуборочная техника

В типичном алгоритме TSP у нас есть несколько точек, и мы хотим путешествовать в оптимальном порядке движения. Точки - это домохозяйства, клиенты и т. Д., По сути, точка на карте.

Вместо точек у меня есть линии для оптимизации. Снегоуборочная машина - хороший пример, когда вам нужно проехать по нескольким улицам. И самая большая разница в том, что конечная точка каждого путешествия отличается от начальной. Моя попытка состояла в том, чтобы просто принять начальную точку как единственный узел в каждом путешествии. Но очевидно, что всякий раз, когда ваш маршрут / линия довольно длинные, вы попадаете в точку, удаленную от начала. И решение уже далеко не оптимальное.

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

Интересно, есть ли уловка моделирования или какой-то другой способ решить эту проблему?

введите описание изображения здесь


person Çagatay Melan    schedule 04.04.2014    source источник
comment
Вы не просто ищете эйлеров путь?   -  person Alex Reinking    schedule 05.04.2014
comment
@AlexReinking: Нет. Что могло заставить вас так думать?   -  person tmyklebu    schedule 05.04.2014


Ответы (2)


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

Задача 1: движение по улице в одном направлении

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

Задача 1A: однонаправленный переход улицы с обязательным завершением

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

Задача 1B: движение по улице в одном направлении с дополнительными боковыми проездами

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

Задача 2: движение по улице в обоих направлениях

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

Задача 2A: двунаправленный переход улицы с обязательным завершением

Это проблема почтальона и / или проблема смешанного транспорта. Представьте себе воображаемого почтальона, который начинает с грузовика, полного почты. На каждой улице часть почты загружается в сумку, которую почтальон пешком несет в каждый дом. Почтальон доставляет почту на одной стороне улицы, а затем возвращается к грузовику, доставляя почту на другой стороне улицы. Другими словами, коммивояжер должен вернуться в пункт отправления, чтобы продолжить использование альтернативного вида транспорта. Для этой задачи каждая улица может быть смоделирована двумя ее конечными точками, и проблема может быть решена с помощью алгоритма TSP с одной модификацией. Как только алгоритм учитывает одну конечную точку улицы, другая конечная точка исключается из рассмотрения.

Задача 2B: переход улицы в двух направлениях с переходом на другую сторону

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

person user3386109    schedule 04.04.2014
comment
Исчерпывающе изучен. Большое спасибо. Делает меня более ясным, что мне не нужна проблема почтальона (или проверки маршрута), а просто сосредоточьтесь на задаче 1A. - person Çagatay Melan; 06.04.2014
comment
Теперь моя задача состоит в том, чтобы добавить этот трюк к моей модели (как это было до сих пор). Держу пари, что нет доступных алгоритмов, решающих эту проблему. Я удивлен, потому что думал, что это необходимо для планирования снегоочистителя; таким образом широко изучается. Но, видимо, нет. - person Çagatay Melan; 06.04.2014

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

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

person zmbq    schedule 04.04.2014
comment
Эйлеров путь не является проблемой оптимизации. Он просто посещает все края (ровно один раз), там оптимизировать нечего. - person Niklas B.; 05.04.2014
comment
Вот только он не ищет эйлерова тропа. - person tmyklebu; 05.04.2014