76 个稳定版本

1.24.0 2024年7月13日
1.23.0 2023年12月22日
1.22.1 2023年8月26日
1.21.1 2023年6月9日
1.4.1 2020年7月30日

#180算法

Download history 226/week @ 2024-04-22 19/week @ 2024-05-13 28/week @ 2024-05-20 31/week @ 2024-05-27 29/week @ 2024-06-03 18/week @ 2024-06-10 25/week @ 2024-06-17 22/week @ 2024-06-24 13/week @ 2024-07-01 164/week @ 2024-07-08 46/week @ 2024-07-15 1/week @ 2024-07-22 272/week @ 2024-07-29 23/week @ 2024-08-05

399 每月下载量
用于 4 crates

Apache-2.0

1MB
18K SLoC

描述

core 包包含构建启发式和元启发式解决复杂 车辆路径问题(VRP) 的主要构建模块。

请查阅仓库 以获取更多信息。


lib.rs:

核心包包含构建启发式和元启发式解决复杂 车辆路径问题 的主要构建模块。

要点

核心包的基本思想是设计一个库,该库可用于解决多种车辆路径问题(VRP)变体,也称为复杂 VRP。为了实现这一点,它定义了必要的领域模型并实现了具有预配置属性的默认元启发式。

另一个目标是直观的设计:它应该相对容易开始使用,而不需要先了解领域知识。这就是为什么 API 设计不试图泛化模型和实现以开发通用元启发式。查看rosomaxa 包以获取更通用的模型/算法。

以下包提供了在当前包基础上已开发的额外功能

  • vrp-scientific 包支持用于科学基准的 VRP 变体
  • vrp-pragmatic 包支持自定义 JSON 格式,可用于模拟现实世界场景
  • vrp-cli 包提供了一个命令行界面和静态库,其中包含了项目提供的一切可用功能

同时,项目试图保持依赖项列表相对较小,但应避免“不是在这里发明的”综合症。

接下来的几节将解释一些基本概念,例如用于建模VRP定义的类型、构造启发式算法、元启发式算法等。如果您对内部实现或库扩展感兴趣,请开始探索。如果您只想查看用户文档,请查看用户指南文档。

VRP建模

模型定义可以分为以下几组

  • common组包含常见模型:时间特定的、位置、距离等。
  • problem组包含VRP定义模型:任务、车辆、成本特定的等。
  • solution组包含用于表示VRP解决方案的模型:路线、行程、活动等。

此外,还有一些关键概念,如FeatureGoalContext

查看相应模块以获取详细信息。

构造启发式算法

构造启发式算法是一种启发式方法,它从一个空解决方案开始,并反复扩展它,直到获得一个完整的解决方案。

该包在construction模块中实现了各种构造启发式算法。

元启发式算法

元启发式算法是一个高级算法框架,它提供了一套指导原则或策略来开发启发式优化算法。其目标之一是引导搜索过程朝着最优解的方向。

更多关于它的详细信息请参见solver模块。

示例

可以在examples文件夹中找到一些VRP变体的详细示例。

在此,示例展示了如何为求解器构造默认配置,使用流畅接口方法覆盖一些默认的元启发式参数,并运行求解器。

use vrp_core::prelude::*;

// create your VRP problem
let problem: Arc<Problem> = create_example_problem();
// build solver config using pre-build builder with defaults and then override some parameters
let config = VrpConfigBuilder::new(problem.clone())
    .prebuild()?
    .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, 84.);
assert_eq!(solution.routes.len(), 1);
assert_eq!(solution.unassigned.len(), 0);

依赖项

~3MB
~64K SLoC