Skip to main content

vrp_core/solver/processing/
advance_departure.rs

1use super::*;
2use crate::construction::enablers::advance_departure_time;
3use crate::construction::heuristics::InsertionContext;
4use rosomaxa::HeuristicSolution;
5
6/// Provides way to reduce waiting time by advancing departure time.
7#[derive(Default)]
8pub struct AdvanceDeparture {}
9
10impl HeuristicSolutionProcessing for AdvanceDeparture {
11    type Solution = InsertionContext;
12
13    fn post_process(&self, solution: Self::Solution) -> Self::Solution {
14        let mut insertion_ctx = solution.deep_copy();
15
16        let problem = insertion_ctx.problem.clone();
17
18        let activity = problem.activity.as_ref();
19        let transport = problem.transport.as_ref();
20
21        insertion_ctx.solution.routes.iter_mut().for_each(|route_ctx| {
22            advance_departure_time(route_ctx, activity, transport, true);
23        });
24
25        problem.goal.accept_solution_state(&mut insertion_ctx.solution);
26
27        insertion_ctx
28    }
29}