GIS 데이터베이스에 Dijkstra, A *보다 새로운 라우팅 알고리즘이 있습니까?


46

Karlsruhe Uni의 Sanders와 Schtolz의 고속도로 계층 구조 및 Microsoft 연구원의 Reach for A * 와 같은 작품이 있습니다 . 둘 다 계산 순서를 크게 줄이고 큰 그래프에서 수천 배의 속도를냅니다 (링크 된 문서의 결과 참조). 후자의 작업은 Open Source Routing Machine으로 이어 졌지만 불행히도 충분히 인기가 없으며 적응하지 못했습니다 (열심히 시도했지만 컴파일 할 수 없었습니다).

동시에, 내가 시도한 db, Spatialite 및 PgRouting은 문서에 따라 Dijkstra 및 A * 알고리즘 만 제공 합니다. 나는 양방향 검색이 언급되지 않았기 때문에 내 경험에서 계산 시간이 두 번 절약됩니다.

데이터베이스 나 다른 응용 프로그램을위한 더 나은 알고리즘이 있습니까?


1
pgRouting 사용자 또는 개발자 이메일 목록에 질문을 게시하셨습니까? 해당 커뮤니티에서 직접 더 나은 답변을 얻을 수 있습니다. 사용자 목록 : ( lists.osgeo.org/mailman/listinfo/pgrouting-users ) 개발자 목록 : ( lists.osgeo.org/mailman/listinfo/pgrouting-dev )
RyanDalton

+1 좋은 질문입니다. Google이 길 찾기에 어떤 알고리즘을 사용하는지 궁금합니다 . 관련 질문은 여기에 있습니다 .
Kirk Kuykendall 2016 년

1
Google은 Karlsruhe 팀 ( algo2.iti.uni-karlsruhe.de/english/index.php )을 지원했기 때문에 기본적으로 오픈 소스 라우팅 머신 인 소프트웨어를 사용한다고 가정합니다.
culebrón 2016 년

답변:


23

진실은 대부분의 사람들이 A * 알고리즘 의 맞춤형 변형을 사용한다는 것입니다 . 휴리스틱의 수정이있는 "큰 녀석들"(공개 포럼에있는 사람은 말할 수 없지만 아마도 그 중 하나를 사용한다고 말할 수 있습니다)에서 이것을 볼 수 있습니다. 사용하는 데이터 세트에 따라 크게 달라집니다.

당신은 이미 "전통적인"옵션을 고려하는 pgrouting을 언급 했습니다 . 간단한 라우팅 알고리즘과 대부분의 문제에 적합합니다. 또한 사용하기 쉽고 백엔드에서 기존 데이터베이스를 사용합니다.

그럼에도 불구하고, 그것은 실제로 해결하려는 문제의 규모와 유형에 달려 있으며 라우팅은 그래프 문제입니다.

다시 한 번, "big guys"에는 일반적으로 라우팅 알고리즘에 영향을주는 그래프와 관련된 많은 데이터 (예 : 교통 데이터, 버스 경로, 보행 경로)가 있습니다. 이들은 멀티 모달 여행 플래너로 알려져 있습니다 (여기서는 "모드"를 계획 할 수도 있습니다-자전거 경로는없고 대중 교통 만 가능합니다). 당신은 당신이 걸 으면 여행 계획도 시간이 민감한 문제 (예를하게하는 방법을 생각할 수 다시 당신이 당신의 목적지로 이동 지하철 잡을 수있을 것입니다, 다시 몇 가장자리를 앞으로 훨씬 더 빨리 당신이 단지 앞으로 가장자리를 탐색하려고하면 이상을 최저 비용 사용).

"big guys"는 기존 데이터베이스에 데이터를 저장하지 않고 사전 계산 된 그래프 (웰컴 하둡 / 매 프러 덕트 클러스터)를 사용합니다. 상상할 수 있듯이 이러한 그래프는 실제로 커지기 때문에 인접한 그래프의 가장자리를 연결하는 방법을 아는 것이 어려울 수 있습니다.

어쨌든, 일부 멀티 모달 라우팅 그래프 프로젝트를 살펴 보는 것이 좋습니다.

Graphserver 오릅니다. 많은 문서가 아니라 많은 순수한 코딩 경이 (AFAIK, MapQuest는 일부 라우팅 제품에 대해이 프로젝트의 변형을 사용한다고 생각합니다).

또 다른 옵션은 OpenTripPlanner 인데 , 그 뒤에는 똑똑한 사람들이 많이 있습니다 (그래프 서버의 사람들 포함).


15

최신 인지 확실하지 않지만 pgRouting에는 Shooting-Star 알고리즘이 있습니다 .

Shooting-Star 알고리즘은 최신 pgRouting 최단 경로 알고리즘입니다. Dijkstra 및 A-Star 알고리즘과 마찬가지로 정점에서 정점이 아닌 링크에서 링크로 라우팅하는 것이 특기입니다. 이를 통해 예를 들어 링크 간의 관계를 정의 할 수 있으며 소스와 대상은 같지만 비용이 다른 "병렬 링크"와 같은 다른 정점 기반 알고리즘 문제를 해결합니다.

ESRI의 Network Analyst 확장은 해결 시간을 제한하기 위해 언급 한 계층 적 접근 방식 을 사용합니다 .

검색해야하는 많은 수의 에지로 인해 전국 네트워크 데이터 세트에서 정확한 최단 경로를 찾는 데 시간이 많이 걸립니다. 성능을 향상시키기 위해, 네트워크 데이터 셋은 주간 도로에서의 운전이 지방 도로에서의 운전보다 선호되는 운송 시스템에서 자연 계층을 모델링 할 수 있습니다. 계층 적 네트워크가 생성되면 양방향 Dijkstra의 수정을 사용하여 출발지와 목적지 사이의 경로를 계산합니다.

ESRI 사이트에는 이러한 접근 방식에 대한 예제 가 포함 된 매우 자세한 백서 가 있지만 다운로드하려면 로그인해야합니다 (ArcGIS Network Analyst의 계층 적 경로 백서).


11

수축 계층은 매우 빠른 알고리즘입니다.

이 알고리즘은 쿼리를 실행하는 동안 RAM에 친숙합니다 (축약 된 그래프를 유지하려면 RAM이 더 필요하고 대량의 전처리가 필요합니다)

대중 교통 라우팅을 해결하는 알고리즘을 포함하여 다른 알고리즘이 있습니다.

Microsoft는 또한 몇 가지 연구를 수행하고 있습니다.

(Daniel Delling도 카를 스루에 출신입니다)

사용 가능한 알고리즘에 대한 좋은 소개와 개요를 얻을 수 있습니다.

경고 : 독일어 강의. 그러나 최소한 헤더는 더 많은 정보 (ALT, Arc-Flags, CHASE, ...) 또는 추가 된 문헌을 얻는 데 도움이됩니다!

최신 정보

GraphHopper는 이제 수축 계층 구조 및 기타 알고리즘을 구현하며 데모를 사용해 볼 수도 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.