| Crates.io | sdvrp |
| lib.rs | sdvrp |
| version | 0.1.3 |
| created_at | 2025-08-08 05:06:09.697061+00 |
| updated_at | 2025-08-08 15:27:22.324827+00 |
| description | Rust binding of Alkaid-SDVRP: An Efficient Open-Source Solver for the Vehicle Routing Problem with Split Deliveries |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1786208 |
| size | 1,733,258 |
Rust binding of Alkaid-SDVRP: An Efficient Open-Source Solver for the Vehicle Routing Problem with Split Deliveries.
[dependencies]
sdvrp = "1.0"
use sdvrp::{config, instance, solve_sdvrp};
#[rustfmt::skip]
fn dense_matrix_example() -> instance::Instance {
instance::Instance::from_dense_matrix(
100,
vec![60, 90, 60, 90, 60, 90, 60, 90],
vec![
vec![0, 100000, 100000, 100000, 100000, 200000, 200000, 200000, 200000],
vec![100000, 0, 141421, 200000, 141421, 100000, 223607, 300000, 223607],
vec![100000, 141421, 0, 141421, 200000, 223607, 100000, 223607, 300000],
vec![100000, 200000, 141421, 0, 141421, 300000, 223607, 100000, 223607],
vec![100000, 141421, 200000, 141421, 0, 223607, 300000, 223607, 100000],
vec![200000, 100000, 223607, 300000, 223607, 0, 282843, 400000, 282843],
vec![200000, 223607, 100000, 223607, 300000, 282843, 0, 282843, 400000],
vec![200000, 300000, 223607, 100000, 223607, 400000, 282843, 0, 282843],
vec![200000, 223607, 300000, 223607, 100000, 282843, 400000, 282843, 0],
],
)
}
#[rustfmt::skip]
fn coord_list_example() -> instance::Instance {
instance::Instance::from_coord_list(
100,
vec![
60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90,
60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90,
60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90, 60, 90,
],
vec![
( 0, 0),
( 1000, 0),
( 924, 383),
( 707, 707),
( 383, 924),
( 0, 1000),
( -383, 924),
( -707, 707),
( -924, 383),
(-1000, 0),
( -924, -383),
( -707, -707),
( -383, -924),
( -0, -1000),
( 383, -924),
( 707, -707),
( 924, -383),
( 2000, 0),
( 1848, 765),
( 1414, 1414),
( 765, 1848),
( 0, 2000),
( -765, 1848),
(-1414, 1414),
(-1848, 766),
(-2000, 0),
(-1848, -765),
(-1414, -1414),
( -766, -1848),
( -0, -2000),
( 765, -1848),
( 1414, -1414),
( 1848, -766),
( 3000, 0),
( 2772, 1148),
( 2121, 2121),
( 1148, 2772),
( 0, 3000),
(-1148, 2772),
(-2121, 2121),
(-2772, 1148),
(-3000, 0),
(-2772, -1148),
(-2122, -2121),
(-1148, -2771),
( -0, -3000),
( 1148, -2772),
( 2121, -2122),
( 2771, -1149),
( 4000, 0),
( 3696, 1531),
( 2828, 2828),
( 1531, 3695),
( 0, 4000),
(-1531, 3696),
(-2828, 2829),
(-3695, 1531),
(-4000, 0),
(-3696, -1530),
(-2829, -2828),
(-1531, -3695),
( -1, -4000),
( 1530, -3696),
( 2828, -2829),
( 3695, -1531),
],
)
}
fn main() {
let mut config = config::Config::default();
config.time_limit = 5.0;
println!("{:?}", solve_sdvrp(&config, &dense_matrix_example()));
config.time_limit = 10.0;
println!("{:?}", solve_sdvrp(&config, &coord_list_example()));
}
Output:
End at 5.00003s: 2282842
[
[(1, 40), (5, 60)],
[(3, 40), (7, 60)],
[(4, 10), (8, 90)],
[(2, 80), (3, 20)],
[(4, 80), (1, 20)],
[(2, 10), (6, 90)],
]
End at 10.0004s: 268473
[
[(14, 80), (13, 20)],
[(57, 60), (41, 40)],
[(45, 20), (46, 80)],
[(63, 60), (47, 40)],
[(33, 20), (34, 80)],
[(51, 60), (35, 40)],
[(36, 80), (35, 20)],
[(30, 90), (14, 10)],
[(16, 10), (32, 90)],
[(16, 80), (15, 20)],
[(40, 10), (56, 90), (8, 0)],
[(58, 90), (42, 10)],
[(12, 80), (11, 20)],
[(34, 10), (50, 90), (2, 0)],
[(61, 60), (45, 40)],
[(27, 60), (11, 40)],
[(13, 40), (29, 60)],
[(26, 90), (10, 10)],
[(9, 20), (10, 80)],
[(46, 10), (62, 90)],
[(40, 80), (39, 20)],
[(39, 40), (55, 60)],
[(38, 10), (54, 90), (6, 0)],
[(33, 40), (49, 60)],
[(23, 60), (7, 40)],
[(43, 20), (44, 80)],
[(28, 90), (12, 10)],
[(41, 20), (42, 80)],
[(31, 60), (15, 40)],
[(59, 60), (43, 40)],
[(25, 60), (9, 40)],
[(37, 40), (53, 60)],
[(38, 80), (37, 20)],
[(17, 60), (1, 40)],
[(4, 80), (3, 20)],
[(20, 90), (4, 10)],
[(24, 90), (8, 10)],
[(18, 90), (2, 10)],
[(7, 20), (8, 80)],
[(3, 40), (19, 60)],
[(2, 80), (1, 20)],
[(6, 80), (5, 20)],
[(6, 10), (22, 90)],
[(5, 40), (21, 60)],
[(12, 0), (60, 90), (44, 10)],
[(32, 0), (48, 10), (64, 90), (16, 0)],
[(32, 0), (48, 80), (47, 20)],
[(4, 0), (52, 90), (36, 10)],
]