规划:最短路径与最短距离的专栏

在本专栏中,会陆续总结最近一段时间在路线规划和最短距离领域的学习与工程实践经验,包括如下内容:

1. 常见的路径规划开源项目和开源数据,比如OpenStreetMap, GraphHopper等

2. 常见的最短路径算法及其代码实现

最短路径算法是图论里经典的算法问题,回顾最短路径算法的发展历史以及各种算法的适用场景。并着重介绍大吞吐量高并发场景下的路径规划算法。

a. Dijkstra算法最为基础,heap性能在Dijkstra里非常重要,介绍heap的一些开源实现;

b. 大吞吐量路径规划场景中的Contraction Hierarchies(CH)算法,以及能够响应路网实时变化的Customizable Contraction Hierarchies(CCH)算法;

c. CH算法与TNR(Transite Node Routing)算法结合;

3. 最短距离Hub Labeling (HL)类算法及其代码实现

最短路径求解后,可以得到最短距离;但性能往往性能不如直接求解最短距离。在一些场景中,往往只需要最短距离而不需要最短路径,HL类算法性能可高达10M/s以上的性能,是最快路径规划算法的几百倍。

a.  复杂图中的Pruned Landmark Labeling (PLL)算法

b. 路网图中的Hierarchical Hub Labelings(HHL)算法

c. 在无向图里性能更高的Hierarchy 2-Hop-Labeling(H2H)算法

4. 10K*10K 距离矩阵计算的算法及代码实现

在一些规划场景中,需要几万个点(经纬度)之间的两两距离作为输入。

这里将介绍距离矩阵算法,单机秒级计算出这上亿甚至上十亿的距离。

5. 空间索引及开源实现

给定经纬度,如何快速定位其最近的线,最近的polygon;介绍二维空间索引,R-Tree, KD-Tree,Grid(geohash、google s2、uber h3) 等。

不定期更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# RoutingKit [![Build Status](https://travis-ci.org/RoutingKit/RoutingKit.svg?branch=master)](https://travis-ci.org/RoutingKit/RoutingKit) RoutingKit is a C++ library that provides advanced route planning functionality. It was developed at [KIT](https://www.kit.edu) in the [group of Prof. Dorothea Wagner](https://i11www.iti.kit.edu/). The most prominent component is an index-based data structure called (Customizable) Contraction Hierarchy, that allows to answer shortest path queries within milliseconds or even less on data sets of continental size while keeping the arc weights flexible. Such running times cannot be achieved without indices. One of the main design goals of RoutingKit is to make recent research results easily accessible to people developing route planning applications. A key element is an interface that is a good compromise between usability and running time performance. For example the following code snippet is enough to build and query a basic index given an [OSM](https://www.openstreetmap.org) PBF data export. ```cpp #include <routingkit/osm_simple.h> #include <routingkit/contraction_hierarchy.h> #include <routingkit/inverse_vector.h> #include <routingkit/timer.h> #include <routingkit/geo_position_to_node.h> #include <iostream> using namespace RoutingKit; using namespace std; int main(){ // Load a car routing graph from OpenStreetMap-based data auto graph = simple_load_osm_car_routing_graph_from_pbf("file.pbf"); auto tail = invert_inverse_vector(graph.first_out); // Build the shortest path index auto ch = ContractionHierarchy::build( graph.node_count(), tail, graph.head, graph.travel_time ); // Build the index to quickly map latitudes and longitudes GeoPositionToNode map_geo_position(graph.latitude, graph.longitude); // Besides the CH itself we need a query object. ContractionHierarchyQuery ch_query(ch); // Use the query object to answer queries from stdin to stdout float from_latitude, from_longitude, to_latitude, to
# CRP Open source C++ Implementation of Customizable Route Planning (CRP) by Delling et al. This project was part of a practical course at Karlsruhe Institute of Technology (KIT). Requirements ============ In order to build CRP you need to have the following software installed: - Boost C++ Library (http://www.boost.org), more specifically Boost Iostreams. - Scons (http://scons.org) - g++ >= 4.8 (https://gcc.gnu.org) Building CRP ============ If the Boost Library is not in your PATH, make sure to edit the *SConstruct* file in the root directory to point the build script to the correct location of Boost. There is a section *Libraries* in the *SConstruct* file where you can specify the paths. Once you have installed all the software packages listed above, you can build the CRP programs by typing ``` scons --target=CRP --optimize=Opt -jX ``` into your terminal where `X` is the number of cores you want to use for building the project. If you want to use a specific g++ compiler version you can add `--compiler=g++-Version`. We also support a debug and profiling build that you can call with `--optimize=Dbg` and `--optimize=Pro` respectively. This command will build three programs in the folder *deploy*: - *osmparser*: Used to parse an OpenStreetMap (OSM) bz2-compressed map file. Call it with `./deploy/osmparser path_to_osm.bz2 path_to_output.graph.bz2` - *precalculation*: Used to build an overlay graph based on a given partition. Call it with `./deploy/precalculation path_to_graph path_to_mlp output_directory`. Here, *path_to_mlp* is the path to a *MultiLevelPartition* file for the graph that you need to provide. For more details, take a look into our project documentation. - *customization*: Used to precompute the metric weights for the overlay graph. Call it with `./deploy/customization path_to_graph path_to_overlay_graph metric_output_directory metric_type`. We currently support the following metric types: *hop* (number of edges traversed), *time* and *dist*.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值