Struct vrp_core::solver::Solver

source ·
pub struct Solver { /* private fields */ }
Expand description

Solves a Vehicle Routing Problem and returns a (solution, its cost) pair in case of success or error description, if solution cannot be found.

A newly created builder instance is pre-configured with some reasonable defaults for mid-size problems (~200), so there is no need to call any of its methods.

Examples

This example shows how to construct default configuration for the solver, override some of default metaheuristic parameters using fluent interface methods, and run the solver:

use vrp_core::prelude::*;

// create your VRP problem
let problem: Arc<Problem> = create_example_problem();
let environment = Arc::new(Environment::new_with_time_quota(Some(60)));
let telemetry_mode = get_default_telemetry_mode(environment.logger.clone());
// build solver config using pre-build builder with defaults and then override some parameters
let config = create_default_config_builder(problem.clone(), environment, telemetry_mode)
    .with_max_time(Some(60))
    .with_max_generations(Some(100))
    .build()?;

// run solver and get the best known solution.
let solution = Solver::new(problem, config).solve()?;

assert_eq!(solution.cost, 42.);
assert_eq!(solution.routes.len(), 1);
assert_eq!(solution.unassigned.len(), 0);

Implementations§

source§

impl Solver

source

pub fn new( problem: Arc<Problem>, config: EvolutionConfig<RefinementContext, GoalContext, InsertionContext> ) -> Self

Tries to create an instance of Solver from provided config.

source

pub fn solve(self) -> Result<Solution, GenericError>

Solves a Vehicle Routing Problem and returns a feasible solution in case of success or error description, if solution cannot be found.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Solver

§

impl !Send for Solver

§

impl !Sync for Solver

§

impl Unpin for Solver

§

impl !UnwindSafe for Solver

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V