Маршрутизация миллионов путей - PullRequest
0 голосов
/ 19 июня 2020

У меня есть OD-матрица примерно из 3 миллионов путей, которые я хотел бы маршрутизировать в сети OSM. Используя Dijkstra, я получаю около 20 путей в минуту или общее время 2500 часов. Было бы плохо, если бы алгоритм ближайшего_узла не пропустил относительно удаленный ближайший узел. С Bellman-Ford у меня, похоже, нет этой проблемы, но она в 40 раз медленнее, а у меня нет 100 000 часов. ;} У меня есть 24 ГБ ОЗУ на мой выбор Ubuntu или Windows машина. Между прочим, службы веб-маршрутизации publi c сталкиваются с той же проблемой - не могут найти маршрут. Мои местоположения OD - это центроиды переписных кварталов в районе залива (где некоторые отдаленные районы могут находиться в нескольких милях от ближайшей дороги). У меня два вопроса: (1) как я могу избежать проблемы, связанной с обнаружением маршрута, и (2) как я могу ускорить процесс (не поможет, если я использую экземпляр Cloud, скажем, с 512 ГБ ОЗУ)? Функция, которую я пытаюсь улучшить, - это route = networkx.shortest_path (G, start_node, end_node, weight = 'travel_time') в сочетании с start_node = osmnx.get_nearest_node (G, start) и его соответствующим аналогом end_node

1 Ответ

0 голосов
/ 19 июня 2020

Мои два вопроса: (1) как я могу избежать проблемы с обнаружением маршрута и (2) как я могу ускорить процесс (не поможет, если я использую экземпляр Cloud, скажем, с 512 ГБ ОЗУ)?

Что касается 1, мне нужно было бы увидеть минимально воспроизводимый пример, чтобы понять, что именно вы испытываете. Но что касается 2, решение кратчайшего пути зависит от ЦП, а не от памяти. Вам будет лучше, если вы сделаете это в облаке, распределяя пути для решения между, скажем, 100 ядрами, чтобы весь процесс завершился в течение дня.

...