pub struct RouteOptimizer { /* private fields */ }Expand description
Route optimizer for waste collection and logistics
Implementations§
Source§impl RouteOptimizer
impl RouteOptimizer
Sourcepub fn new(nodes: Vec<Node>, edges: Vec<Edge>) -> Self
pub fn new(nodes: Vec<Node>, edges: Vec<Edge>) -> Self
Create a new route optimizer with the given nodes and edges
§Arguments
nodes- List of geographic nodes (locations)edges- List of edges (road segments) connecting nodes
§Example
use rmp_route_optimizer::{RouteOptimizer, Node, Edge, PickupSide};
let nodes = vec![
Node::new(1, 40.7128, -74.0060),
Node::new(2, 40.7138, -74.0070),
];
let edges = vec![
Edge::new(1, 2, 100.0, false, PickupSide::Either),
];
let optimizer = RouteOptimizer::new(nodes, edges);Sourcepub fn optimize_eulerian(
&self,
start_node: i64,
_enforce_right_side: bool,
) -> Result<EulerianCircuit>
pub fn optimize_eulerian( &self, start_node: i64, _enforce_right_side: bool, ) -> Result<EulerianCircuit>
Optimize route using Eulerian circuit algorithm
This method finds an optimal route that traverses all edges in the graph, starting and ending at the specified node. If the graph is not Eulerian, it will add augmenting edges to make it Eulerian.
§Arguments
start_node- ID of the starting nodeenforce_right_side- Whether to enforce right-side pickup constraints
§Returns
An EulerianCircuit containing the optimized route
§Errors
Returns an error if:
- The graph is empty
- The start node doesn’t exist
- The graph is disconnected
- The graph cannot be made Eulerian
§Example
use rmp_route_optimizer::{RouteOptimizer, Node, Edge, PickupSide};
let nodes = vec![
Node::new(1, 40.7128, -74.0060),
Node::new(2, 40.7138, -74.0070),
Node::new(3, 40.7148, -74.0080),
];
let edges = vec![
Edge::new(1, 2, 100.0, false, PickupSide::Either),
Edge::new(2, 3, 100.0, false, PickupSide::Either),
Edge::new(3, 1, 100.0, false, PickupSide::Either),
];
let optimizer = RouteOptimizer::new(nodes, edges);
let circuit = optimizer.optimize_eulerian(1, false).unwrap();
assert_eq!(circuit.nodes.first(), circuit.nodes.last());
assert!(circuit.total_cost > 0.0);Auto Trait Implementations§
impl Freeze for RouteOptimizer
impl RefUnwindSafe for RouteOptimizer
impl Send for RouteOptimizer
impl Sync for RouteOptimizer
impl Unpin for RouteOptimizer
impl UnsafeUnpin for RouteOptimizer
impl UnwindSafe for RouteOptimizer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more