pqx123-lgtm/moonbit-vrp-solver/core does not have a README file
fn DistanceMetric::distance(self : DistanceMetric, ax : Double, ay : Double, bx : Double, by : Double) -> Doublepub struct FeasibilityAssessment {
feasible : Bool
capacity_violation : Double
time_violation : Double
duration_violation : Double
unassigned_count : Int
route_count : Int
validation : ValidationReport
} derive(ToJson, Debug)fn FeasibilityPolicy::tune(self : FeasibilityPolicy, capacity_tolerance? : Double, time_tolerance? : Double, duration_tolerance? : Double, max_unassigned? : Int) -> FeasibilityPolicypub 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)fn Solution::is_valid_for(self : Solution, instance : VrpInstance, policy : FeasibilityPolicy) -> Boolpub 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)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) -> SolveConfigpub struct SolveResult {
instance : VrpInstance
seed_solution : Solution
best_solution : Solution
stats : SolveStats
} derive(ToJson, Debug)fn SolveResult::new(instance : VrpInstance, seed_solution : Solution, best_solution : Solution, stats : SolveStats) -> SolveResultfn 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) -> SolveStatspub(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)fn VehicleProfile::new(capacity : Double, fleet_size? : Int, max_route_duration? : Double) -> VehicleProfilepub struct VrpInstance {
name : String
variant : ProblemVariant
metric : DistanceMetric
depot : Depot
vehicle : VehicleProfile
customers : Array[Customer]
distance_matrix : Array[Array[Double]]
} derive(ToJson, Debug)fn assess_solution(instance : VrpInstance, solution : Solution, policy : FeasibilityPolicy) -> FeasibilityAssessmentfn best_insertions_for_customer(instance : VrpInstance, solution : Solution, customer_index : Int, config : SolveConfig) -> Array[CandidateInsertion]fn build_solution(instance : VrpInstance, route_stops : Array[Array[Int]], unassigned : Array[Int], config : SolveConfig) -> Solutionfn decode_routes(instance : VrpInstance, text : String, config : SolveConfig) -> Solution raise RouteEncodingErrorfn feasible_insertions(instance : VrpInstance, solution : Solution, customer_index : Int, config : SolveConfig, policy : FeasibilityPolicy) -> Array[CandidateInsertion]fn improve_with_two_opt(instance : VrpInstance, solution : Solution, config : SolveConfig) -> Solutionfn insertion_delta(instance : VrpInstance, route : RoutePlan, customer_index : Int, position : Int) -> Double?fn make_instance(name : String, variant : ProblemVariant, depot : Depot, vehicle : VehicleProfile, customers : Array[Customer]) -> VrpInstancefn make_instance_with_metric(name : String, variant : ProblemVariant, depot : Depot, vehicle : VehicleProfile, customers : Array[Customer], metric : DistanceMetric) -> VrpInstancefn relocate_customer(instance : VrpInstance, solution : Solution, from_route : Int, from_position : Int, to_route : Int, to_position : Int, config : SolveConfig) -> Solution?fn reverse_route(instance : VrpInstance, solution : Solution, route_index : Int, config : SolveConfig) -> Solution?fn route_can_accept(instance : VrpInstance, route : RoutePlan, customer_index : Int, policy : FeasibilityPolicy) -> Boolfn swap_customers(instance : VrpInstance, solution : Solution, left_route : Int, left_position : Int, right_route : Int, right_position : Int, config : SolveConfig) -> Solution?fn two_opt_route(instance : VrpInstance, route : RoutePlan, first : Int, last : Int, config : SolveConfig) -> RoutePlan?Install
Download zipVehicle-routing heuristics in pure MoonBit, with CVRP and VRPTW support.