В прикладной математике маршрутизация транзитных узлов может использоваться для ускорения кратчайшего маршрута путем предварительного вычисления соединений между общими узлами доступа к подсети, соответствующей дальним поездкам. [1]
Маршрутизация транзитных узлов как фреймворк была создана в 2007 году [1], и в последующие годы появилось много конкретных реализаций, таких как подходы с использованием сеток, иерархий автомагистралей [2] и иерархий сжатия . [3] Маршрутизация транзитных узлов — это статический подход, требующий предварительной обработки попарных расстояний между важными узлами в графе (см. ниже, как выбираются эти узлы). Динамический подход не был опубликован. [4]
Путешествия на большие расстояния обычно включают в себя движение по подмножеству дорожной сети , например, по автострадам, а не, например, по городским дорогам. В эту подсеть можно попасть только с помощью редко распределенных узлов доступа. При сравнении друг с другом, несколько маршрутов на большие расстояния, начинающихся в одном и том же месте, всегда используют одно и то же небольшое количество узлов доступа, близких к начальному месту, для входа в эту сеть. Точно так же, похожие целевые местоположения всегда достигаются с помощью одних и тех же узлов доступа, близких к ним. Эта интуиция справедлива только для путешествий на большие расстояния. При поездках на короткие расстояния такие узлы доступа могут никогда не использоваться, поскольку самый быстрый путь к цели проходит только по местным дорогам.
Поскольку количество таких узлов доступа невелико по сравнению с общим количеством узлов в дорожной сети, все кратчайшие маршруты, соединяющие эти узлы друг с другом, могут быть предварительно рассчитаны и сохранены. Поэтому при расчете кратчайшего пути необходимо рассчитывать только маршруты к узлам доступа, близким к начальному и целевому местоположению.
Короткие маршруты между близкими точками старта и назначения могут не требовать транзитных узлов. В этом случае указанная выше структура приводит к неверным расстояниям, поскольку она заставляет маршруты посещать по крайней мере один транзитный узел.
Чтобы предотвратить такого рода проблемы, можно использовать фильтр локальности . Для заданных начальных и целевых местоположений фильтр локальности решает, следует ли применять маршрутизацию транзитного узла или использовать резервную процедуру (локальный запрос).
Маршрутизация транзитного узла — это не алгоритм, а просто фреймворк для ускорения планирования маршрута. Общий фреймворк оставляет открытыми несколько вопросов, на которые нужно ответить для его реализации:
Следующие примеры реализации этой структуры отвечают на эти вопросы, используя различные базовые методы, такие как группировка узлов в ячейки сетки наложения [2] и более сложную реализацию, основанную на иерархиях сжатия . [3]
При сеточном подходе ограничивающий квадрат всех узлов равномерно подразделяется на квадратные ячейки.
Как выбираются узлы доступа?
Для каждой ячейки набор узлов доступа можно найти, посмотрев на внутреннюю область 5x5 ячеек и внешнюю область 9x9 ячеек вокруг . Сосредоточившись на узлах пересечения (концах ребер, пересекающих границу , или ), узлы доступа для являются теми узлами , которые являются частью кратчайшего пути от некоторого узла в к узлу в . В качестве узлов доступа для произвольного узла выбираются все узлы доступа из (красные точки на изображении справа).
Как выбираются транзитные узлы?
Набор транзитных узлов представляет собой в точности объединение всех наборов узлов доступа.
Какой фильтр по местоположению следует использовать?
Способ выбора узлов доступа подразумевает, что если источник и цель находятся на расстоянии более четырех ячеек сетки друг от друга, транзитный узел должен быть пройден по кратчайшему пути, и расстояние может быть рассчитано, как описано выше. Если они находятся ближе друг к другу, для получения расстояния используется резервный алгоритм.
Как следует обрабатывать локальные запросы?
Локальные запросы необходимы только в том случае, если начальная и конечная точки уже находятся близко друг к другу, поэтому можно выбрать любой подходящий алгоритм кратчайшего пути, например алгоритм Дейкстры или его расширения.
Предварительно вычисленные расстояния между каждым узлом и соответствующим узлом доступа, а также попарные расстояния между транзитными узлами необходимо хранить в таблицах расстояний.
В реализации на основе сетки, описанной выше, это приводит к 16 байтам памяти, которые требуются для каждого узла дорожного графа. Полный граф дорожной сети США имеет 23 947 347 узлов. [5] Таким образом, для хранения таблиц расстояний потребуется около 383 МБ памяти.
Как выбираются транзитные узлы?
По определению, иерархия сжатия перемещает важные узлы (т. е. узлы, которые являются частью многих кратчайших путей) на вершину иерархии. Таким образом, набор транзитных узлов может быть выбран в качестве самых высоких узлов иерархии сжатия.
Как выбираются узлы доступа?
Узлы прямого доступа узла могут быть найдены путем запуска восходящего поиска иерархии сжатия, начинающейся с . Во время восходящего поиска ребра, покидающие ранее найденные транзитные узлы, не ослабляются. Когда в поиске больше не остается восходящих узлов для урегулирования, те транзитные узлы, которые были урегулированы, являются узлами доступа . Узлы обратного доступа могут быть найдены аналогично.
Какой фильтр по местоположению следует использовать?
Если самый высокий узел кратчайшего пути вверх-вниз в иерархии не является частью набора транзитных узлов, то запрос был локальным. Это подразумевает, что ни верхняя часть пути (начинающаяся в начальном узле), ни нижняя часть пути (заканчивающаяся в целевом узле) не могут содержать транзитный узел, и в обоих путях должен быть общий узел. Во время расчета узлов доступа пространство поиска (все посещенные узлы в верхней части иерархии) для каждого узла может быть сохранено без включения транзитных узлов. При выполнении запроса эти пространства поиска для начального и целевого узла проверяются на пересечение. Если эти пространства не пересекаются , можно использовать маршрутизацию транзитного узла, поскольку восходящий и нисходящий пути должны встретиться в транзитном узле. В противном случае может быть кратчайший путь без транзитного узла.
Как следует обрабатывать локальные запросы?
Локальные запросы используют обычный алгоритм запросов иерархии сжатия.