1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//! # RMP Route Optimizer
//!
//! A high-performance route optimization library for waste collection, logistics,
//! and delivery services using Eulerian circuit algorithms.
//!
//! ## Features
//!
//! - **Eulerian Circuit Optimization**: Solves the Chinese Postman Problem for efficient route planning
//! - **Geographic Awareness**: Uses Haversine distance for accurate real-world routing
//! - **Side-of-Street Routing**: Supports pickup side constraints (left/right/either)
//! - **Graph Augmentation**: Automatically adds edges to make graphs Eulerian
//! - **High Performance**: Optimized Rust implementation with minimal allocations
//!
//! ## Example
//!
//! ```rust
//! use rmp_route_optimizer::{RouteOptimizer, Node, Edge, PickupSide};
//!
//! // Create nodes (locations)
//! let nodes = vec![
//! Node { id: 1, lat: 40.7128, lon: -74.0060 },
//! Node { id: 2, lat: 40.7138, lon: -74.0070 },
//! Node { id: 3, lat: 40.7148, lon: -74.0080 },
//! ];
//!
//! // Create edges (roads)
//! let edges = vec![
//! Edge { from: 1, to: 2, cost: 100.0, oneway: false, side: PickupSide::Either },
//! Edge { from: 2, to: 3, cost: 100.0, oneway: false, side: PickupSide::Either },
//! Edge { from: 3, to: 1, cost: 100.0, oneway: false, side: PickupSide::Either },
//! ];
//!
//! // Optimize route
//! let optimizer = RouteOptimizer::new(nodes, edges);
//! let circuit = optimizer.optimize_eulerian(1, false).unwrap();
//!
//! println!("Optimized route: {:?}", circuit.nodes);
//! println!("Total cost: {}", circuit.total_cost);
//! ```
pub use ;
pub use RouteOptimizer;
pub use ;
/// Library version
pub const VERSION: &str = env!;