Правда состоит в том, что большинство людей используют собственные варианты алгоритма A * . Вы увидите это на большинстве «больших парней» (я не могу сказать, кто они, на публичном форуме, но я могу сказать, что вы, вероятно, используете один из них - гарантировано), где модификация эвристики очень зависит от наборов данных, которые они используют.
Вы уже упоминали о pgrouting , который я бы назвал «традиционным» вариантом. Это хорошо для выполнения простых алгоритмов маршрутизации и для большинства задач. Он также прост в использовании и использует традиционную базу данных на своем бэкэнде.
Тем не менее, это действительно зависит от масштаба и типа проблемы, которую вы пытаетесь решить, а маршрутизация является проблемой графа .
Еще раз, у «больших парней» обычно есть много данных, связанных с их графиком (например, данные трафика, автобусные маршруты, пешеходные маршруты), которые влияют на алгоритм маршрутизации. Они известны как мультимодальные планировщики поездок (где у вас также есть выбор «режимов» планирования - нет велосипедных дорожек - только общественный транспорт - подобные вещи). Вы можете думать , как планирование поездки также становится время деликатного вопроса (то есть , если вы идете назад несколько ребер назад, вы сможете поймать метро , который доставит вас к месту назначения вперед гораздо быстрее , чем если бы вы просто пытались перейти края вперед используя самую низкую стоимость).
«Большие парни» не хранят свои данные в традиционной базе данных как таковые, они используют предварительно вычисленные графы (добро пожаловать в кластеры hadoop / mapreduce!). Как вы можете себе представить, эти графы становятся действительно большими, поэтому знание того, как соединить ребра смежных графов, может стать проблемой.
В любом случае, я бы порекомендовал вам взглянуть на некоторые мультимодальные проекты графа маршрутизации:
Graphserver приходит на ум. Не много документации, но много чистого кода (AFAIK, я думаю, MapQuest использует вариант этого проекта для некоторых своих продуктов маршрутизации).
Другим вариантом может быть OpenTripPlanner, за которым стоит много умных людей (включая людей из Graphserver).