pqx123-lgtm/moonbit-vrp-solver/core does not have a README file

    RouteEncodingError

    pub(all) suberror RouteEncodingError {
    EmptyRoute
    InvalidCustomerId(String)
    UnknownCustomerId(Int)
    DuplicateCustomerId(Int)
    } derive(Eq, ToJson,
    Debug
    )

    Checked errors for the compact route exchange format.

    CandidateInsertion

    pub struct CandidateInsertion {
    route_index : Int
    position : Int
    objective : Double
    solution : Solution
    } derive(ToJson,
    Debug
    )

    CandidateInsertion::objective

    fn CandidateInsertion::objective(self : CandidateInsertion) -> Double

    CandidateInsertion::position

    fn CandidateInsertion::position(self : CandidateInsertion) -> Int

    CandidateInsertion::result

    CandidateInsertion::route_index

    fn CandidateInsertion::route_index(self : CandidateInsertion) -> Int

    ConstraintSummary

    pub struct ConstraintSummary {
    route_count : Int
    assigned_count : Int
    unassigned_count : Int
    total_distance : Double
    total_duration : Double
    total_waiting : Double
    total_load : Double
    capacity_utilization : Double
    maximum_lateness : Double
    feasible : Bool
    } derive(ToJson,
    Debug
    )

    Aggregated route and assignment metrics suitable for dashboards and reports.

    ConstraintSummary::assigned_count

    fn ConstraintSummary::assigned_count(self : ConstraintSummary) -> Int

    ConstraintSummary::capacity_utilization

    fn ConstraintSummary::capacity_utilization(self : ConstraintSummary) -> Double

    ConstraintSummary::is_feasible

    fn ConstraintSummary::is_feasible(self : ConstraintSummary) -> Bool

    ConstraintSummary::maximum_lateness

    fn ConstraintSummary::maximum_lateness(self : ConstraintSummary) -> Double

    ConstraintSummary::route_count

    fn ConstraintSummary::route_count(self : ConstraintSummary) -> Int

    ConstraintSummary::total_distance

    fn ConstraintSummary::total_distance(self : ConstraintSummary) -> Double

    ConstraintSummary::total_duration

    fn ConstraintSummary::total_duration(self : ConstraintSummary) -> Double

    ConstraintSummary::total_load

    fn ConstraintSummary::total_load(self : ConstraintSummary) -> Double

    ConstraintSummary::total_waiting

    fn ConstraintSummary::total_waiting(self : ConstraintSummary) -> Double

    ConstraintSummary::unassigned_count

    fn ConstraintSummary::unassigned_count(self : ConstraintSummary) -> Int

    ConstraintSummary::unserved_ratio

    fn ConstraintSummary::unserved_ratio(self : ConstraintSummary, instance : VrpInstance) -> Double

    CostBreakdown

    pub struct CostBreakdown {
    distance : Double
    capacity_penalty : Double
    time_penalty : Double
    duration_penalty : Double
    unassigned_penalty : Double
    objective : Double
    } derive(ToJson,
    Debug
    )

    CostBreakdown::capacity_penalty

    fn CostBreakdown::capacity_penalty(self : CostBreakdown) -> Double

    CostBreakdown::distance

    fn CostBreakdown::distance(self : CostBreakdown) -> Double

    CostBreakdown::duration_penalty

    fn CostBreakdown::duration_penalty(self : CostBreakdown) -> Double

    CostBreakdown::objective

    fn CostBreakdown::objective(self : CostBreakdown) -> Double

    CostBreakdown::penalty_total

    fn CostBreakdown::penalty_total(self : CostBreakdown) -> Double

    CostBreakdown::time_penalty

    fn CostBreakdown::time_penalty(self : CostBreakdown) -> Double

    CostBreakdown::unassigned_penalty

    fn CostBreakdown::unassigned_penalty(self : CostBreakdown) -> Double

    Customer

    pub struct Customer {
    external_id : Int
    x : Double
    y : Double
    demand : Double
    ready_time : Double
    due_time : Double
    service_time : Double
    } derive(ToJson,
    Debug
    )

    Customer::coordinates

    fn Customer::coordinates(self : Customer) -> (Double, Double)

    Customer::demand

    fn Customer::demand(self : Customer) -> Double

    Customer::due_time

    fn Customer::due_time(self : Customer) -> Double

    Customer::external_id

    fn Customer::external_id(self : Customer) -> Int

    Customer::new

    fn Customer::new(external_id : Int, x : Double, y : Double, demand : Double, ready_time? : Double, due_time? : Double, service_time? : Double) -> Customer

    Customer::ready_time

    fn Customer::ready_time(self : Customer) -> Double

    Customer::service_time

    fn Customer::service_time(self : Customer) -> Double

    Customer::window_width

    fn Customer::window_width(self : Customer) -> Double

    Customer::x_coord

    fn Customer::x_coord(self : Customer) -> Double

    Customer::y_coord

    fn Customer::y_coord(self : Customer) -> Double

    Depot

    pub struct Depot {
    x : Double
    y : Double
    ready_time : Double
    due_time : Double
    } derive(ToJson,
    Debug
    )

    Depot::coordinates

    fn Depot::coordinates(self : Depot) -> (Double, Double)

    Depot::due_time

    fn Depot::due_time(self : Depot) -> Double

    Depot::new

    fn Depot::new(x : Double, y : Double, ready_time? : Double, due_time? : Double) -> Depot

    Depot::ready_time

    fn Depot::ready_time(self : Depot) -> Double

    Depot::x_coord

    fn Depot::x_coord(self : Depot) -> Double

    Coordinate accessors keep the record representation private while making the public API usable from other packages.

    Depot::y_coord

    fn Depot::y_coord(self : Depot) -> Double

    DestroyOperator

    pub(all) enum DestroyOperator {
    Random
    Shaw
    Worst
    Route
    Cluster
    TimeCritical
    } derive(Eq, ToJson,
    Debug
    )

    DistanceMetric

    pub(all) enum DistanceMetric {
    Euclidean
    RoundedEuclidean
    Manhattan
    Chebyshev
    } derive(Eq, ToJson,
    Debug
    )

    Distance functions supported by the instance builder.

    DistanceMetric::description

    fn DistanceMetric::description(self : DistanceMetric) -> String

    DistanceMetric::distance

    fn DistanceMetric::distance(self : DistanceMetric, ax : Double, ay : Double, bx : Double, by : Double) -> Double

    Computes the distance between two points under this metric.

    DistanceMetric::is_symmetric

    fn DistanceMetric::is_symmetric(self : DistanceMetric) -> Bool

    All built-in metrics are symmetric and satisfy d(a, a) = 0.

    DistanceMetric::name

    fn DistanceMetric::name(self : DistanceMetric) -> String

    Returns the conventional name used by benchmark formats.

    FeasibilityAssessment

    pub struct FeasibilityAssessment {
    feasible : Bool
    capacity_violation : Double
    time_violation : Double
    duration_violation : Double
    unassigned_count : Int
    route_count : Int
    validation : ValidationReport
    } derive(ToJson,
    Debug
    )

    FeasibilityAssessment::capacity_violation

    fn FeasibilityAssessment::capacity_violation(self : FeasibilityAssessment) -> Double

    FeasibilityAssessment::duration_violation

    fn FeasibilityAssessment::duration_violation(self : FeasibilityAssessment) -> Double

    FeasibilityAssessment::is_feasible

    fn FeasibilityAssessment::is_feasible(self : FeasibilityAssessment) -> Bool

    FeasibilityAssessment::route_count

    fn FeasibilityAssessment::route_count(self : FeasibilityAssessment) -> Int

    FeasibilityAssessment::time_violation

    fn FeasibilityAssessment::time_violation(self : FeasibilityAssessment) -> Double

    FeasibilityAssessment::unassigned_count

    fn FeasibilityAssessment::unassigned_count(self : FeasibilityAssessment) -> Int

    FeasibilityAssessment::validation

    FeasibilityPolicy

    pub struct FeasibilityPolicy {
    capacity_tolerance : Double
    time_tolerance : Double
    duration_tolerance : Double
    max_unassigned : Int
    } derive(ToJson,
    Debug
    )

    Numerical policy used by integrations that need explicit tolerances.

    FeasibilityPolicy::capacity_tolerance

    fn FeasibilityPolicy::capacity_tolerance(self : FeasibilityPolicy) -> Double

    FeasibilityPolicy::default

    FeasibilityPolicy::duration_tolerance

    fn FeasibilityPolicy::duration_tolerance(self : FeasibilityPolicy) -> Double

    FeasibilityPolicy::max_unassigned

    fn FeasibilityPolicy::max_unassigned(self : FeasibilityPolicy) -> Int

    FeasibilityPolicy::time_tolerance

    fn FeasibilityPolicy::time_tolerance(self : FeasibilityPolicy) -> Double

    FeasibilityPolicy::tune

    fn FeasibilityPolicy::tune(self : FeasibilityPolicy, capacity_tolerance? : Double, time_tolerance? : Double, duration_tolerance? : Double, max_unassigned? : Int) -> FeasibilityPolicy

    InstanceStatistics

    pub struct InstanceStatistics {
    customer_count : Int
    total_demand : Double
    average_demand : Double
    maximum_demand : Double
    minimum_demand : Double
    demand_capacity_ratio : Double
    fleet_size : Int
    average_nearest_neighbor : Double
    average_depot_distance : Double
    time_windowed_customers : Int
    } derive(ToJson,
    Debug
    )

    Structural statistics used to select a heuristic and explain a benchmark.

    InstanceStatistics::average_demand

    fn InstanceStatistics::average_demand(self : InstanceStatistics) -> Double

    InstanceStatistics::average_depot_distance

    fn InstanceStatistics::average_depot_distance(self : InstanceStatistics) -> Double

    InstanceStatistics::average_nearest_neighbor

    fn InstanceStatistics::average_nearest_neighbor(self : InstanceStatistics) -> Double

    InstanceStatistics::customer_count

    fn InstanceStatistics::customer_count(self : InstanceStatistics) -> Int

    InstanceStatistics::demand_capacity_ratio

    fn InstanceStatistics::demand_capacity_ratio(self : InstanceStatistics) -> Double

    InstanceStatistics::fleet_size

    fn InstanceStatistics::fleet_size(self : InstanceStatistics) -> Int

    InstanceStatistics::maximum_demand

    fn InstanceStatistics::maximum_demand(self : InstanceStatistics) -> Double

    InstanceStatistics::minimum_demand

    fn InstanceStatistics::minimum_demand(self : InstanceStatistics) -> Double

    InstanceStatistics::time_windowed_customers

    fn InstanceStatistics::time_windowed_customers(self : InstanceStatistics) -> Int

    InstanceStatistics::total_demand

    fn InstanceStatistics::total_demand(self : InstanceStatistics) -> Double

    ProblemVariant

    pub(all) enum ProblemVariant {
    CVRP
    VRPTW
    } derive(Eq, ToJson,
    Debug
    )

    ProblemVariant::description

    fn ProblemVariant::description(self : ProblemVariant) -> String

    Returns a user-facing description of a problem variant.

    ProblemVariant::name

    fn ProblemVariant::name(self : ProblemVariant) -> String

    RepairOperator

    pub(all) enum RepairOperator {
    Greedy
    Regret2
    DemandFirst
    TimeWindow
    } derive(Eq, ToJson,
    Debug
    )

    RouteMetrics

    pub struct RouteMetrics {
    distance : Double
    duration : Double
    waiting_time : Double
    load : Double
    capacity_violation : Double
    time_violation : Double
    duration_violation : Double
    feasible : Bool
    arrivals : Array[Double]
    } derive(ToJson,
    Debug
    )

    RouteMetrics::arrivals

    fn RouteMetrics::arrivals(self : RouteMetrics) -> Array[Double]

    RouteMetrics::capacity_violation

    fn RouteMetrics::capacity_violation(self : RouteMetrics) -> Double

    RouteMetrics::distance

    fn RouteMetrics::distance(self : RouteMetrics) -> Double

    RouteMetrics::duration

    fn RouteMetrics::duration(self : RouteMetrics) -> Double

    RouteMetrics::duration_violation

    fn RouteMetrics::duration_violation(self : RouteMetrics) -> Double

    RouteMetrics::has_violation

    fn RouteMetrics::has_violation(self : RouteMetrics) -> Bool

    RouteMetrics::is_feasible

    fn RouteMetrics::is_feasible(self : RouteMetrics) -> Bool

    RouteMetrics::load

    fn RouteMetrics::load(self : RouteMetrics) -> Double

    RouteMetrics::time_violation

    fn RouteMetrics::time_violation(self : RouteMetrics) -> Double

    RouteMetrics::total_violation

    fn RouteMetrics::total_violation(self : RouteMetrics) -> Double

    RouteMetrics::waiting_time

    fn RouteMetrics::waiting_time(self : RouteMetrics) -> Double

    RoutePlan

    pub struct RoutePlan {
    stops : Array[Int]
    metrics : RouteMetrics
    } derive(ToJson,
    Debug
    )

    RoutePlan::contains

    fn RoutePlan::contains(self : RoutePlan, customer_index : Int) -> Bool

    RoutePlan::customer_indices

    fn RoutePlan::customer_indices(self : RoutePlan) -> Array[Int]

    RoutePlan::distance

    fn RoutePlan::distance(self : RoutePlan) -> Double

    RoutePlan::duration

    fn RoutePlan::duration(self : RoutePlan) -> Double

    RoutePlan::first_customer

    fn RoutePlan::first_customer(self : RoutePlan) -> Int?

    RoutePlan::is_feasible

    fn RoutePlan::is_feasible(self : RoutePlan) -> Bool

    RoutePlan::last_customer

    fn RoutePlan::last_customer(self : RoutePlan) -> Int?

    RoutePlan::load

    fn RoutePlan::load(self : RoutePlan) -> Double

    RoutePlan::metrics

    fn RoutePlan::metrics(self : RoutePlan) -> RouteMetrics

    RoutePlan::stop_at

    fn RoutePlan::stop_at(self : RoutePlan, position : Int) -> Int?

    RoutePlan::stop_count

    fn RoutePlan::stop_count(self : RoutePlan) -> Int

    RoutePlan::stops

    fn RoutePlan::stops(self : RoutePlan) -> Array[Int]

    RouteProfile

    pub struct RouteProfile {
    stop_count : Int
    load_ratio : Double
    distance : Double
    duration : Double
    waiting : Double
    lateness : Double
    slack : Double
    feasible : Bool
    } derive(ToJson,
    Debug
    )

    A normalized view of one route's resource consumption.

    RouteProfile::distance

    fn RouteProfile::distance(self : RouteProfile) -> Double

    RouteProfile::duration

    fn RouteProfile::duration(self : RouteProfile) -> Double

    RouteProfile::is_feasible

    fn RouteProfile::is_feasible(self : RouteProfile) -> Bool

    RouteProfile::lateness

    fn RouteProfile::lateness(self : RouteProfile) -> Double

    RouteProfile::load_ratio

    fn RouteProfile::load_ratio(self : RouteProfile) -> Double

    RouteProfile::slack

    fn RouteProfile::slack(self : RouteProfile) -> Double

    RouteProfile::stop_count

    fn RouteProfile::stop_count(self : RouteProfile) -> Int

    RouteProfile::waiting

    fn RouteProfile::waiting(self : RouteProfile) -> Double

    Solution

    pub struct Solution {
    routes : Array[RoutePlan]
    unassigned : Array[Int]
    total_distance : Double
    objective : Double
    feasible : Bool
    total_capacity_violation : Double
    total_time_violation : Double
    total_duration_violation : Double
    } derive(ToJson,
    Debug
    )

    Solution::assigned_customers

    fn Solution::assigned_customers(self : Solution) -> Array[Int]

    Solution::completion_ratio

    fn Solution::completion_ratio(self : Solution, instance : VrpInstance) -> Double

    Solution::constraint_summary

    fn Solution::constraint_summary(self : Solution, instance : VrpInstance) -> ConstraintSummary

    Solution::copy

    fn Solution::copy(self : Solution) -> Solution

    Solution::cost_breakdown

    fn Solution::cost_breakdown(self : Solution, config : SolveConfig) -> CostBreakdown

    Explains the penalized objective without exposing the private formula.

    Solution::customer_labels

    fn Solution::customer_labels(self : Solution, instance : VrpInstance) -> Array[Array[Int]]

    Solution::is_complete

    fn Solution::is_complete(self : Solution, instance : VrpInstance) -> Bool

    Solution::is_feasible

    fn Solution::is_feasible(self : Solution) -> Bool

    Solution::is_valid_for

    fn Solution::is_valid_for(self : Solution, instance : VrpInstance, policy : FeasibilityPolicy) -> Bool

    Solution::max_capacity_violation

    fn Solution::max_capacity_violation(self : Solution) -> Double

    Solution::max_time_violation

    fn Solution::max_time_violation(self : Solution) -> Double

    Solution::objective_value

    fn Solution::objective_value(self : Solution) -> Double

    Solution::route_at

    fn Solution::route_at(self : Solution, index : Int) -> RoutePlan?

    Solution::route_count

    fn Solution::route_count(self : Solution) -> Int

    Solution::route_distances

    fn Solution::route_distances(self : Solution) -> Array[Double]

    Solution::route_durations

    fn Solution::route_durations(self : Solution) -> Array[Double]

    Solution::route_loads

    fn Solution::route_loads(self : Solution) -> Array[Double]

    Solution::route_profiles

    fn Solution::route_profiles(self : Solution, instance : VrpInstance) -> Array[RouteProfile]

    Solution::route_stops

    fn Solution::route_stops(self : Solution) -> Array[Array[Int]]

    Solution::routes

    fn Solution::routes(self : Solution) -> Array[RoutePlan]

    Solution::total_capacity_violation

    fn Solution::total_capacity_violation(self : Solution) -> Double

    Solution::total_distance

    fn Solution::total_distance(self : Solution) -> Double

    Solution::total_duration_violation

    fn Solution::total_duration_violation(self : Solution) -> Double

    Solution::total_time_violation

    fn Solution::total_time_violation(self : Solution) -> Double

    Solution::unassigned_customers

    fn Solution::unassigned_customers(self : Solution) -> Array[Int]

    Solution::validate

    fn Solution::validate(self : Solution, instance : VrpInstance) -> ValidationReport

    SolveConfig

    pub struct SolveConfig {
    iterations : Int
    local_search_rounds : Int
    segment_length : Int
    min_destroy : Int
    max_destroy : Int
    initial_temperature : Double
    cooling_rate : Double
    capacity_penalty : Double
    time_penalty : Double
    duration_penalty : Double
    unassigned_penalty : Double
    } derive(ToJson,
    Debug
    )

    SolveConfig::default

    fn SolveConfig::default() -> SolveConfig

    SolveConfig::destroy_range

    fn SolveConfig::destroy_range(self : SolveConfig) -> (Int, Int)

    SolveConfig::iteration_budget

    fn SolveConfig::iteration_budget(self : SolveConfig) -> Int

    SolveConfig::local_search_rounds

    fn SolveConfig::local_search_rounds(self : SolveConfig) -> Int

    SolveConfig::penalties

    fn SolveConfig::penalties(self : SolveConfig) -> (Double, Double, Double, Double)

    SolveConfig::tune

    fn SolveConfig::tune(self : SolveConfig, iterations? : Int, local_search_rounds? : Int, segment_length? : Int, min_destroy? : Int, max_destroy? : Int, initial_temperature? : Double, cooling_rate? : Double, capacity_penalty? : Double, time_penalty? : Double, duration_penalty? : Double, unassigned_penalty? : Double) -> SolveConfig

    SolveResult

    pub struct SolveResult {
    instance : VrpInstance
    seed_solution : Solution
    best_solution : Solution
    stats : SolveStats
    } derive(ToJson,
    Debug
    )

    SolveResult::best

    fn SolveResult::best(self : SolveResult) -> Solution

    SolveResult::completion_ratio

    fn SolveResult::completion_ratio(self : SolveResult) -> Double

    SolveResult::improvement

    fn SolveResult::improvement(self : SolveResult) -> Double

    SolveResult::is_improved

    fn SolveResult::is_improved(self : SolveResult) -> Bool

    SolveResult::new

    fn SolveResult::new(instance : VrpInstance, seed_solution : Solution, best_solution : Solution, stats : SolveStats) -> SolveResult

    SolveResult::problem

    fn SolveResult::problem(self : SolveResult) -> VrpInstance

    SolveResult::seed

    fn SolveResult::seed(self : SolveResult) -> Solution

    SolveStats

    pub struct SolveStats {
    iterations : Int
    accepted_moves : Int
    improved_moves : Int
    local_improvements : Int
    evaluated_candidates : Int
    best_iteration : Int
    seed_objective : Double
    best_objective : Double
    } derive(ToJson,
    Debug
    )

    SolveStats::accepted_moves

    fn SolveStats::accepted_moves(self : SolveStats) -> Int

    SolveStats::best_iteration

    fn SolveStats::best_iteration(self : SolveStats) -> Int

    SolveStats::best_objective

    fn SolveStats::best_objective(self : SolveStats) -> Double

    SolveStats::evaluated_candidates

    fn SolveStats::evaluated_candidates(self : SolveStats) -> Int

    SolveStats::improved_moves

    fn SolveStats::improved_moves(self : SolveStats) -> Int

    SolveStats::local_improvements

    fn SolveStats::local_improvements(self : SolveStats) -> Int

    SolveStats::new

    fn SolveStats::new(iterations : Int, accepted_moves : Int, improved_moves : Int, best_iteration : Int, seed_objective : Double, best_objective : Double, local_improvements? : Int, evaluated_candidates? : Int) -> SolveStats

    SolveStats::seed_objective

    fn SolveStats::seed_objective(self : SolveStats) -> Double

    ValidationIssue

    pub(all) enum ValidationIssue {
    InvalidVehicleCapacity
    InvalidFleetSize
    InvalidRouteDuration
    InvalidDepotWindow
    InvalidCustomerWindow(Int)
    NegativeDemand(Int)
    InvalidCoordinate(Int)
    DuplicateExternalId(Int)
    InvalidDistanceMatrix
    TotalDemandExceedsFleet
    TooManyRoutes
    InvalidRouteCustomer(Int)
    DuplicateAssignment(Int)
    AssignmentOverlap(Int)
    MissingAssignment(Int)
    DuplicateUnassignment(Int)
    } derive(Eq, ToJson,
    Debug
    )

    Structural and feasibility diagnostics for instances and solutions.

    ValidationReport

    pub struct ValidationReport {
    valid : Bool
    issues : Array[ValidationIssue]
    } derive(ToJson,
    Debug
    )

    ValidationReport::has_issue

    fn ValidationReport::has_issue(self : ValidationReport, issue : ValidationIssue) -> Bool

    ValidationReport::is_valid

    fn ValidationReport::is_valid(self : ValidationReport) -> Bool

    ValidationReport::issue_count

    fn ValidationReport::issue_count(self : ValidationReport) -> Int

    ValidationReport::issues

    VehicleProfile

    pub struct VehicleProfile {
    capacity : Double
    max_route_duration : Double
    fleet_size : Int
    } derive(ToJson,
    Debug
    )

    VehicleProfile::capacity

    fn VehicleProfile::capacity(self : VehicleProfile) -> Double

    VehicleProfile::capacity_per_route

    fn VehicleProfile::capacity_per_route(self : VehicleProfile) -> Double

    VehicleProfile::fleet_size

    fn VehicleProfile::fleet_size(self : VehicleProfile) -> Int

    VehicleProfile::max_route_duration

    fn VehicleProfile::max_route_duration(self : VehicleProfile) -> Double

    VehicleProfile::new

    fn VehicleProfile::new(capacity : Double, fleet_size? : Int, max_route_duration? : Double) -> VehicleProfile

    VrpInstance

    pub struct VrpInstance {
    name : String
    variant : ProblemVariant
    metric : DistanceMetric
    depot : Depot
    vehicle : VehicleProfile
    customers : Array[Customer]
    distance_matrix : Array[Array[Double]]
    } derive(ToJson,
    Debug
    )

    VrpInstance::average_demand

    fn VrpInstance::average_demand(self : VrpInstance) -> Double

    VrpInstance::customer

    fn VrpInstance::customer(self : VrpInstance, customer_index : Int) -> Customer

    VrpInstance::customer_count

    fn VrpInstance::customer_count(self : VrpInstance) -> Int

    VrpInstance::customer_labels

    fn VrpInstance::customer_labels(self : VrpInstance) -> Array[Int]

    VrpInstance::customers

    fn VrpInstance::customers(self : VrpInstance) -> Array[Customer]

    VrpInstance::depot

    fn VrpInstance::depot(self : VrpInstance) -> Depot

    VrpInstance::depot_index

    fn VrpInstance::depot_index(self : VrpInstance) -> Int

    VrpInstance::distance

    fn VrpInstance::distance(self : VrpInstance, from_index : Int, to_index : Int) -> Double

    VrpInstance::distance_metric

    fn VrpInstance::distance_metric(self : VrpInstance) -> DistanceMetric

    VrpInstance::distance_summary

    fn VrpInstance::distance_summary(self : VrpInstance) -> (Double, Double, Double)

    Returns a compact summary of a matrix for regression tests and diagnostics.

    VrpInstance::fleet_capacity

    fn VrpInstance::fleet_capacity(self : VrpInstance) -> Double

    VrpInstance::has_time_windows

    fn VrpInstance::has_time_windows(self : VrpInstance) -> Bool

    VrpInstance::index_of_label

    fn VrpInstance::index_of_label(self : VrpInstance, label : Int) -> Int?

    VrpInstance::instance_name

    fn VrpInstance::instance_name(self : VrpInstance) -> String

    VrpInstance::is_capacity_feasible

    fn VrpInstance::is_capacity_feasible(self : VrpInstance) -> Bool

    VrpInstance::label_of

    fn VrpInstance::label_of(self : VrpInstance, customer_index : Int) -> Int

    VrpInstance::nearest_customers

    fn VrpInstance::nearest_customers(self : VrpInstance, from_index : Int, limit : Int) -> Array[Int]

    Returns the nearest customer indices, ordered by distance from a point.

    VrpInstance::service_horizon

    fn VrpInstance::service_horizon(self : VrpInstance) -> Double

    VrpInstance::total_demand

    fn VrpInstance::total_demand(self : VrpInstance) -> Double

    VrpInstance::validate

    fn VrpInstance::validate(self : VrpInstance) -> ValidationReport

    VrpInstance::variant

    fn VrpInstance::variant(self : VrpInstance) -> ProblemVariant

    VrpInstance::vehicle

    fn VrpInstance::vehicle(self : VrpInstance) -> VehicleProfile

    all_customer_indices

    fn all_customer_indices(instance : VrpInstance) -> Array[Int]

    analyze_instance

    fn analyze_instance(instance : VrpInstance) -> InstanceStatistics

    Computes demand, geometry, and time-window statistics in one pass.

    assess_solution

    fn assess_solution(instance : VrpInstance, solution : Solution, policy : FeasibilityPolicy) -> FeasibilityAssessment

    Evaluates a solution against a caller-provided tolerance policy.

    best_insertions_for_customer

    fn best_insertions_for_customer(instance : VrpInstance, solution : Solution, customer_index : Int, config : SolveConfig) -> Array[CandidateInsertion]

    build_route

    fn build_route(instance : VrpInstance, stops : Array[Int]) -> RoutePlan

    build_solution

    fn build_solution(instance : VrpInstance, route_stops : Array[Array[Int]], unassigned : Array[Int], config : SolveConfig) -> Solution

    decode_routes

    fn decode_routes(instance : VrpInstance, text : String, config : SolveConfig) -> Solution raise RouteEncodingError

    Decodes the compact route format and assigns every omitted customer to the returned solution's unassigned list.

    empty_solution

    fn empty_solution(instance : VrpInstance, config : SolveConfig) -> Solution

    encode_routes

    fn encode_routes(instance : VrpInstance, solution : Solution) -> String

    Encodes routes as id,id;id,id, using external customer labels.

    evaluate_route

    fn evaluate_route(instance : VrpInstance, stops : Array[Int]) -> RouteMetrics

    feasible_insertions

    fn feasible_insertions(instance : VrpInstance, solution : Solution, customer_index : Int, config : SolveConfig, policy : FeasibilityPolicy) -> Array[CandidateInsertion]

    improve_with_two_opt

    fn improve_with_two_opt(instance : VrpInstance, solution : Solution, config : SolveConfig) -> Solution

    Applies the best improving 2-opt edit found in a solution.

    insertion_delta

    fn insertion_delta(instance : VrpInstance, route : RoutePlan, customer_index : Int, position : Int) -> Double?

    Returns the cost change caused by inserting a stop at a route position.

    instance_signature

    fn instance_signature(instance : VrpInstance) -> String

    Returns a stable identity string for cache keys and benchmark manifests.

    make_instance

    fn make_instance(name : String, variant : ProblemVariant, depot : Depot, vehicle : VehicleProfile, customers : Array[Customer]) -> VrpInstance

    make_instance_with_metric

    fn make_instance_with_metric(name : String, variant : ProblemVariant, depot : Depot, vehicle : VehicleProfile, customers : Array[Customer], metric : DistanceMetric) -> VrpInstance

    Builds an instance with an explicit distance convention.

    relocate_customer

    fn relocate_customer(instance : VrpInstance, solution : Solution, from_route : Int, from_position : Int, to_route : Int, to_position : Int, config : SolveConfig) -> Solution?

    Moves one customer between route positions and rebuilds all metrics.

    removal_delta

    fn removal_delta(instance : VrpInstance, route : RoutePlan, position : Int) -> Double?

    Returns the cost change caused by removing one stop from a route.

    reverse_route

    fn reverse_route(instance : VrpInstance, solution : Solution, route_index : Int, config : SolveConfig) -> Solution?

    Reverses a complete route when the resulting route remains feasible.

    route_can_accept

    fn route_can_accept(instance : VrpInstance, route : RoutePlan, customer_index : Int, policy : FeasibilityPolicy) -> Bool

    route_customer_overlap

    fn route_customer_overlap(left : RoutePlan, right : RoutePlan) -> Int

    route_metrics_text

    fn route_metrics_text(route : RoutePlan) -> String

    Returns one line of route-level metrics for lightweight logging.

    route_profile

    fn route_profile(instance : VrpInstance, route : RoutePlan) -> RouteProfile

    singleton_solution

    fn singleton_solution(instance : VrpInstance, config : SolveConfig) -> Solution

    solution_duplicate_count

    fn solution_duplicate_count(solution : Solution) -> Int

    solution_route_count_histogram

    fn solution_route_count_histogram(solution : Solution) -> Array[Int]

    solution_route_length_percentiles

    fn solution_route_length_percentiles(solution : Solution) -> (Double, Double, Double)

    solution_signature

    fn solution_signature(instance : VrpInstance, solution : Solution) -> String

    Returns a stable route signature for equality/regression assertions.

    swap_customers

    fn swap_customers(instance : VrpInstance, solution : Solution, left_route : Int, left_position : Int, right_route : Int, right_position : Int, config : SolveConfig) -> Solution?

    Swaps two customer positions, including positions from different routes.

    two_opt_route

    fn two_opt_route(instance : VrpInstance, route : RoutePlan, first : Int, last : Int, config : SolveConfig) -> RoutePlan?

    Applies a 2-opt reversal and returns None for an invalid or infeasible edit.

    validate_instance

    fn validate_instance(instance : VrpInstance) -> ValidationReport

    Checks data invariants without running a solver.

    validate_solution

    fn validate_solution(instance : VrpInstance, solution : Solution) -> ValidationReport

    Checks that every customer is assigned exactly once or explicitly unassigned.

    validation_messages

    fn validation_messages(report : ValidationReport) -> Array[String]