pub fn run_list_solver<S, V, C, DM, IDM>(
solution: S,
finalize_fn: fn(&mut S),
constraints_fn: fn() -> C,
list_len: fn(&S, usize) -> usize,
list_remove: fn(&mut S, usize, usize) -> Option<V>,
list_insert: fn(&mut S, usize, usize, V),
list_get: fn(&S, usize, usize) -> Option<V>,
list_set: fn(&mut S, usize, usize, V),
list_reverse: fn(&mut S, usize, usize, usize),
sublist_remove: fn(&mut S, usize, usize, usize) -> Vec<V>,
sublist_insert: fn(&mut S, usize, usize, Vec<V>),
ruin_remove: fn(&mut S, usize, usize) -> V,
ruin_insert: fn(&mut S, usize, usize, V),
element_count: fn(&S) -> usize,
get_assigned: fn(&S) -> Vec<V>,
entity_count: fn(&S) -> usize,
list_remove_for_construction: fn(&mut S, usize, usize) -> V,
index_to_element: fn(&S, usize) -> V,
cross_distance_meter: DM,
intra_distance_meter: IDM,
variable_name: &'static str,
descriptor_index: usize,
descriptor: fn() -> SolutionDescriptor,
entity_count_by_descriptor: fn(&S, usize) -> usize,
terminate: Option<&AtomicBool>,
sender: UnboundedSender<(S, S::Score)>,
) -> Swhere
S: PlanningSolution,
S::Score: Score + ParseableScore,
V: Copy + PartialEq + Eq + Hash + Send + Sync + Debug + 'static,
C: ConstraintSet<S, S::Score>,
DM: CrossEntityDistanceMeter<S> + Clone,
IDM: CrossEntityDistanceMeter<S> + Clone,Expand description
Solves a list variable problem using construction heuristic + local search.
Called by macro-generated solve() methods for solutions using
#[shadow_variable_updates] (list variables). When phases are configured in
solver.toml, the construction type, acceptor, forager, and move selectors
are built from config; otherwise defaults are used.
§Type Parameters
S- The solution typeV- The list element typeC- The constraint set typeDM- Cross-entity distance meter typeIDM- Intra-entity distance meter type
§Default Behavior (no config)
- Construction:
ListCheapestInsertion - Acceptor:
LateAcceptance(400) - Forager:
AcceptedCount(4) - Move selector:
Union(NearbyListChange(20), NearbyListSwap(20), ListReverse) - Termination: 60s