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 在 算法 中
399 每月下载量
用于 4 crates
1MB
18K SLoC
描述
core
包包含构建启发式和元启发式解决复杂 车辆路径问题(VRP) 的主要构建模块。
请查阅仓库 以获取更多信息。
lib.rs
:
核心包包含构建启发式和元启发式解决复杂 车辆路径问题
的主要构建模块。
要点
核心包的基本思想是设计一个库,该库可用于解决多种车辆路径问题(VRP)变体,也称为复杂 VRP。为了实现这一点,它定义了必要的领域模型并实现了具有预配置属性的默认元启发式。
另一个目标是直观的设计:它应该相对容易开始使用,而不需要先了解领域知识。这就是为什么 API 设计不试图泛化模型和实现以开发通用元启发式。查看rosomaxa 包以获取更通用的模型/算法。
以下包提供了在当前包基础上已开发的额外功能
vrp-scientific
包支持用于科学基准的 VRP 变体vrp-pragmatic
包支持自定义 JSON 格式,可用于模拟现实世界场景vrp-cli
包提供了一个命令行界面和静态库,其中包含了项目提供的一切可用功能
同时,项目试图保持依赖项列表相对较小,但应避免“不是在这里发明的”综合症。
接下来的几节将解释一些基本概念,例如用于建模VRP定义的类型、构造启发式算法、元启发式算法等。如果您对内部实现或库扩展感兴趣,请开始探索。如果您只想查看用户文档,请查看用户指南
文档。
VRP建模
模型定义可以分为以下几组
此外,还有一些关键概念,如Feature
和GoalContext
。
查看相应模块以获取详细信息。
构造启发式算法
构造启发式算法是一种启发式方法,它从一个空解决方案开始,并反复扩展它,直到获得一个完整的解决方案。
该包在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