Có các thuật toán định tuyến mới hơn (so với Dijkstra, A *) trong cơ sở dữ liệu GIS không?


46

Có những tác phẩm như Reach for A * từ các nhà nghiên cứu của Microsoft và Highway HVELies của Sanders và Schtolz (nếu tôi đánh vần tên chính xác) từ Karlsruhe Uni . Cả hai đều giảm thứ tự tính toán rất nhiều và tăng tốc hàng nghìn lần trên các biểu đồ lớn (xem kết quả trong các tài liệu được liên kết). Công việc thứ hai đã dẫn đến Máy định tuyến nguồn mở , điều không may là không đủ phổ biến và không thích nghi (tôi không thể biên dịch nó mặc dù đã rất cố gắng).

Đồng thời, các dbs mà tôi đã thử, Spatialite và PGRouting, theo tài liệu của họ, chỉ cung cấp các thuật toán Dijkstra và A * . Tôi thậm chí chưa từng thấy tìm kiếm hai chiều được đề cập, giúp tiết kiệm thời gian tính toán hai lần theo kinh nghiệm của tôi.

Có các thuật toán tốt hơn cho cơ sở dữ liệu hoặc các ứng dụng khác?


1
Bạn đã đăng câu hỏi của mình lên danh sách email của người dùng hoặc nhà phát triển pgRouting chưa? Bạn có thể nhận được phản hồi tốt hơn trực tiếp từ cộng đồng đó. Danh sách người dùng: ( lists.osgeo.org/mailman/listinfo/pgrouting-users ) danh sách Nhà phát triển: ( lists.osgeo.org/mailman/listinfo/pgrouting-dev )
RyanDalton

+1 Câu hỏi tuyệt vời. Tôi tự hỏi thuật toán nào google sử dụng cho Get Direction . Câu hỏi liên quan ở đây .
Kirk Kuykendall

1
Vì Google hỗ trợ nhóm Karlsruhe ( algo2.iti.uni-karlsruhe.de/english/index.php ) Tôi cho rằng họ sử dụng phần mềm của họ, về cơ bản là Máy định tuyến nguồn mở.
culebrón

Câu trả lời:


23

Sự thật là hầu hết mọi người sử dụng một biến thể tùy chỉnh của thuật toán A * . Bạn sẽ thấy điều này trên hầu hết các "ông lớn" (Tôi không thể nói họ là ai trong một diễn đàn công cộng, nhưng tôi có thể nói với bạn rằng bạn có thể sử dụng một trong số họ - được đảm bảo), trong đó việc sửa đổi các heuristic là rất phụ thuộc vào bộ dữ liệu mà họ sử dụng.

Bạn đã đề cập đến pgrouting rồi, mà tôi sẽ xem xét một tùy chọn "truyền thống". Nó là tốt để làm các thuật toán định tuyến đơn giản và cho hầu hết các vấn đề. Nó cũng dễ sử dụng và sử dụng cơ sở dữ liệu truyền thống tại phần phụ trợ của nó.

Tuy nhiên, nó thực sự phụ thuộc vào quy mô và loại vấn đề bạn đang cố gắng giải quyết và định tuyến là một vấn đề về đồ thị .

Một lần nữa, các "ông lớn" thường có rất nhiều dữ liệu được liên kết với biểu đồ của họ (ví dụ: dữ liệu giao thông, tuyến xe buýt, đường đi bộ) ảnh hưởng đến thuật toán định tuyến. Chúng được gọi là các nhà hoạch định chuyến đi đa phương thức (nơi bạn cũng có thể lựa chọn lập kế hoạch "chế độ" - không có đường dành cho xe đạp - chỉ có phương tiện giao thông công cộng - kiểu đó). Bạn có thể nghĩ như thế nào kế hoạch chuyến đi cũng trở thành một vấn đề nhạy cảm thời gian (ví dụ: nếu bạn đi bộ trở lại một vài cạnh trở lại, bạn sẽ có thể bắt tàu điện ngầm đó sẽ đưa bạn đến đích của bạn về phía trước nhanh hơn nhiều so với nếu bạn chỉ cố gắng để di chuyển các cạnh phía trước sử dụng chi phí thấp nhất).

Các "ông lớn" không lưu trữ dữ liệu của họ trong cơ sở dữ liệu truyền thống, họ sử dụng các biểu đồ được tính toán trước (các cụm hadoop / mapreduce chào mừng!). Như bạn có thể tưởng tượng, những biểu đồ này trở nên thực sự lớn, vì vậy biết cách kết nối các cạnh của biểu đồ liền kề có thể là một thách thức.

Dù sao, tôi khuyên bạn nên xem một số dự án đồ thị định tuyến đa phương thức:

Máy chủ đồ họa đến với tâm trí. Không có nhiều tài liệu nhưng rất nhiều điều tuyệt vời về mã hóa (AFAIK, tôi tin rằng MapQuest sử dụng một biến thể của dự án này cho một số sản phẩm định tuyến của họ).

Một tùy chọn khác sẽ là OpenTripPlanner có rất nhiều người thông minh đằng sau nó (bao gồm cả những người từ máy chủ đồ thị).


15

Không chắc chắn nếu nó mới hơn nhưng pgRouting có thuật toán Chụp sao :

Thuật toán shooting-Star là thuật toán đường dẫn ngắn nhất pgRouting mới nhất. Điểm đặc biệt của nó là nó định tuyến từ liên kết này đến liên kết khác chứ không phải từ đỉnh này sang đỉnh khác như thuật toán Dijkstra và A-Star đã làm. Điều này cho phép xác định mối quan hệ giữa các liên kết chẳng hạn, và nó giải quyết một số vấn đề thuật toán dựa trên đỉnh khác như liên kết song song của Cameron, có cùng nguồn và mục tiêu nhưng chi phí khác nhau.

Tiện ích mở rộng phân tích mạng của ESRI sử dụng phương pháp phân cấp mà bạn đã đề cập để hạn chế thời gian giải quyết:

Việc tìm đường dẫn ngắn nhất chính xác trên bộ dữ liệu mạng toàn quốc rất tốn thời gian do số lượng lớn các cạnh cần tìm kiếm. Để cải thiện hiệu suất, bộ dữ liệu mạng có thể mô hình hóa hệ thống phân cấp tự nhiên trong hệ thống giao thông, nơi lái xe trên đường cao tốc liên bang thích hợp hơn lái xe trên đường địa phương. Khi một mạng phân cấp đã được tạo, một sửa đổi của Dijkstra hai chiều được sử dụng để tính toán tuyến đường giữa điểm gốc và điểm đến.

Có một tờ giấy trắng rất chi tiết với các ví dụ về cách tiếp cận này tại trang ESRI - tuy nhiên nó yêu cầu bạn phải đăng nhập để tải xuống (Các tuyến đường phân cấp trong Sách trắng phân tích mạng ArcGIS).


11

Contraction HVELy ​​là một thuật toán rất nhanh:

Thuật toán này thân thiện với RAM trong khi thực hiện truy vấn (để giữ một biểu đồ được ký hợp đồng, cần thêm RAM cũng như tiền xử lý lớn)

Có một số thuật toán khác - bao gồm các thuật toán giải quyết định tuyến chuyển tuyến công cộng:

Microsoft cũng đang thực hiện một số nghiên cứu:

(tốt, Daniel Delling cũng đến từ Karlsruhe)

Bạn có thể có được một giới thiệu tốt đẹp và tổng quan về các thuật toán có sẵn:

Cảnh báo: bài giảng tiếng Đức (!). nhưng ít nhất các tiêu đề có thể giúp bạn có thêm thông tin (ALT, Arc-Flag, CHASE, ...) hoặc tài liệu được nối thêm!

cập nhật

Bây giờ GraphHopper thực hiện các hệ thống phân cấp co lại và các thuật toán khác, bạn cũng có thể thử bản demo .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.