Наилучшая возможная реализация варианта использования коммивояжера/транспортного средства
Недавно я наткнулся на случай в интервью, когда случай использования, который был попрошен для решения, относится к проблеме коммивояжера/проблеме маршрутизации транспортных средств. Я смог рассказать им, что представляет собой настоящая проблема, и какие математики участвуют в этой проблеме. Я объяснил, как нижеприведенный вариант использования также можно решить с помощью парадигмы MapReduce в Hadoop. (объясняется, как несколько сокращений заданий на карте могут решить проблему), используя алгоритм Graph, упомянутый в этой книге "Интенсивная обработка текста с помощью MapReduce" Джимми Лин и Крис Дайер.
Из любопытства я провел некоторое исследование в google, и я вижу, что для этой проблемы в разных вариантах сделано много исследований и исследований.
Задача, о которой я спрашивал, имеет координаты города, упомянутого в (x, y) формате, и многие решения, которые я видел в google, рассматривают некоторые другие факторы, такие как дистанция единицы измерения, отрицательные/позитивные единицы измерения и так далее. Поэтому, короче, я занимался исследованиями и чтением, и я стал более смущенным.
Мой вопрос здесь для нижеследующего варианта использования, какие могут быть возможные решения, и что будет лучшим решением среди них. Если какой-нибудь опытный человек может поставить на него какие-то огни, будет полезно очистить мое замешательство и лучше понять решение. или если кто-то может направить меня в правильном направлении (чтобы я больше не путал изучение всего океана решений)
Случай использования, заданный в интервью:
Компания пытается найти оптимальное оптимальное решение для обслуживания своей клиентской базы в 300 человек с 12 сотрудниками.
Они хотят, чтобы технологическое решение подсказывало, как они смогут удовлетворять требования клиентов по мере роста бизнеса, а также другие изменения, такие как местоположение изменений клиентов, новые местоположения и т.д.
Проблема в основном представляет собой проблему с проблемой коммутирующего коммивояжера (TSP) или маршрутизации транспортного средства (VSP). Следующие вещи должны быть завершены здесь.
Начальные координаты (0,0) и пример городских координат приведены ниже.
Вот координаты, с которыми ожидаемое рабочее решение предоставляется в текстовом файле как вход:
X coordinate Y Coordinate
420 278
421 40
29 178
350 47
298 201
417 186
378 134
447 239
42 114
45 199
362 195
381 243
429 1
338 209
176 9
364 26
326 182
500 129
190 51
489 103
368 142
132 260
305 200
446 137
375 154
440 190
9 118
437 32
383 266
-
Что может быть правильным способом справиться с этой NP-трудной проблемой или если не правильно
каким образом могут быть разные подходы со своими плюсами и минусами.
-
Поскольку его большая проблема, основанная на анализе, может быть видной визуализации
чтобы решить эту проблему. Как некоторый график или использование R/аналитических инструментов
Сообщите мне, если вам нужна дополнительная информация, или если вы можете предложить, где я могу читать и понимать больше.
Заранее спасибо
Ответы
Ответ 1
Нет правильного пути решения проблемы NP. Поскольку сложность экспоненциальна, это займет очень много времени для чего-то другого, кроме тривиальных примеров.
Однако существуют приближения, которые могут приблизиться к реальному ответу и могут быть достаточно хороши для вашего приложения (как, впрочем, это не самый короткий путь, но он находится в пределах некоторого относительного диапазона).
Ознакомьтесь с нашей страницей wikipedia. У них даже есть несколько примеров.
Ответ 2
Если бы я задал этот вопрос на собеседовании - я предложу что-то вроде описанного в этом paper, выглядит как наилучшее совпадение для вашей задачи рецептура. В этой статье вы найдете оптимизированный приблизительный подход для решения проблемы нескольких продавцов со всеми продавцами, начиная с одной точки. Это может быть принято, если мы знаем, где сотрудники уходят, решая каждую задачу подпрограммы каждого коммерческого продавца (кластеризация делит основную проблему на классические проблемы) с началом в конкретном домашнем/домашнем офисе продавца.
Если у нас есть график мест как входных данных, а не только координаты - мы можем заменить k-средства алгоритмом кластеризации графа, например MCL.
Ответ 3
В самом деле, как упоминает Дмитрий, это случай многолетней продавщицы.
Естественно, что NP-hard собеседники ищут вам алгоритм оптимизации алгоритма.
Я думаю, что ключ в этом случае - это поиск алгоритма, который способен обновлять в реальном времени изменения количества и местоположения пунктов назначения. Ant colony optimisaiton (форма оптимизации роя частиц) была изначально сформулирована для проблемы коммивояжера, см. статью и википедию:
https://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms
"М. Дориго, В. Маниццо и А. Колони, система Ant: оптимизация колонией взаимодействующих агентов, транзакции IEEE по системам, человеку и кибернетике - часть B, том 26, номер 1, страницы 29-41, 1996."
Это было обобщено, так как к проблеме множественного перемещения салмана см., например, эту статью (opensource) для некоторой хорошей работы в ней:
http://www.researchgate.net/publication/263389346_Multi-type_ant_colony_system_for_solving_the_multiple_traveling_salesman_problem
В ситуации с интервью я бы подробно остановился на том, что Плюсы: 1. эффективное эвристическое решение; 2. Возможность обновления в реальном времени обеих изменений в графике; 3. Для бонусных очков я упоминаю, что, как только разумно эффективное решение было получено в silico, самим драйверам можно было бы назначить маршруты немного вероятным образом, впоследствии можно было бы оптимизировать, управляемые реальными данными.
Минусы состоят в том, что разумно большие объемы мощности, вероятно, потребуются по сравнению с проблемами, которые сначала уменьшают пространство поиска, как предложил Дмитрий. Во-вторых, если они хотят, чтобы вы на самом деле составляли alogirthm, это могло бы быть довольно сложным в пространстве интервью.
Интересный вопрос:)
Ответ 4
Я не эксперт, но вы не могли бы просто рассчитать расстояние между началом и всеми остальными точками и найти ближайшую точку, а затем повторить процесс для этой точки, пока не накроете каждую точку?