vrp_core/solver/search/
local_search.rs1use crate::construction::heuristics::InsertionContext;
2use crate::models::GoalContext;
3use crate::solver::search::LocalOperator;
4use crate::solver::RefinementContext;
5use rosomaxa::prelude::*;
6use std::sync::Arc;
7
8pub struct LocalSearch {
10 operator: Arc<dyn LocalOperator>,
11}
12
13impl LocalSearch {
14 pub fn new(operator: Arc<dyn LocalOperator>) -> Self {
16 Self { operator }
17 }
18}
19
20impl HeuristicSearchOperator for LocalSearch {
21 type Context = RefinementContext;
22 type Objective = GoalContext;
23 type Solution = InsertionContext;
24
25 fn search(&self, heuristic_ctx: &Self::Context, solution: &Self::Solution) -> Self::Solution {
26 let refinement_ctx = heuristic_ctx;
27 let insertion_ctx = solution;
28
29 if let Some(new_insertion_ctx) = self.operator.explore(refinement_ctx, insertion_ctx) {
30 new_insertion_ctx
31 } else {
32 insertion_ctx.deep_copy()
33 }
34 }
35}