routee-compass-core 0.7.0

The core routing algorithms and data structures of the RouteE-Compass energy-aware routing engine
Documentation
# Compass Core Crate

Crate containing core routing modules of RouteE Compass used by all downstream crates.
This can be broken up into the following modules:
- [`crate::model`] - [data-model]#data-model of the search algorithm
  - [`crate::model::graph`] - road network topology collection type
  - [`crate::model::property`] - road network record types
  - [`crate::model::traversal`] - search cost model
  - [`crate::model::frontier`] - search frontier validation predicates
  - [`crate::model::termination::termination_model`] - system-level rules on timeouts + limits for search
- [`crate::algorithm`] - [algorithm]#algorithm implementations
  - [`crate::algorithm::search`] - search algorithm module
    - [`crate::algorithm::search::search_algorithm_type::SearchAlgorithmType`] - enumeration listing search algorithm types, so far only traditional a star supported
    - [`crate::algorithm::search::a_star::a_star`] - a star search implementation
  - [`crate::algorithm::component:scc`] - strongly-connected components algorithm
- [`crate::util`] - utility modules

### Data Model

RouteE Compass takes a layered approach to modeling the road network.
At the core is the [Graph] model. 
The edges and vertices are stored in `vec`s and carry the minimal data required for most search applications:
- [`crate::model::property::edge::Edge`] records store distance in meters
- [`crate::model::property::vertex::Vertex`] records store coordinate locations, assumed in WGS84 projection

A forward and reverse adjacency list describes connectivity in the graph using the indices of the edges and vertices in their respective `vec`s.

From this alone we can implement a distance-minimizing search.
This is done via a [TraversalModel], which provides an API for computing the costs of traversal based on the search state, graph, and any exogenous datasets.
The convention in RouteE Compass is to load additional `vec`s in the [TraversalModel] which can serve as lookup functions by `EdgeId` for traversal costs and `(EdgeId, EdgeId)` for access costs.
This is also where the compass-powertrain crate loads an energy estimator.
See [TraversalModel] for more details.

### Algorithm

RouteE Compass is set up to provide a suite of search algorithms which may be useful for different search problems.
In all cases, these are assumed to be deterministic searches.
At present, only an a star algorithm is implemented.

Other graph algorithms may be added here in future, such as the connected components module.

[Graph]: crate::model::graph::Graph
[TraversalModel]: crate::model::traversal::traversal_model::TraversalModel