多快递员问题的建模与求解
问题描述
这 多快递员计划(MCP)问题 定义如下:
- 我们有 m快递员 负责分发 n≥m个项目 不同的客户地点。
- 每位快递员 *我* 具有最大负载能力 *lᵢ*.
- 每一项 *j* 有:
- 交货地点 *j*. - 大小 *sⱼ* (例如重量或体积)。
- 快递员必须在一个共同的地方开始和结束他们的旅行 原点o.
- 物品的分配必须尊重每个快递员的装载能力。
目标:尽量减少 任何快递员旅行的最大距离,确保公平分配工作量。
______________________________________________________________________
解决方案概述
该项目提供 三种优化模型 为了解决MCP:
- 约束规划(CP)
- 使用 巨人旅行社(GTR) 代表前任与继任者的关系。 - 与旅行矩阵方法相比,提高了可扩展性,特别是在大型实例上。
- 满意模理论(SMT)
- 基于3D二进制“旅行”矩阵编码快递到位置的转换。
- 混合整数规划(MIP)
- 还使用旅行矩阵公式,类似于经典公式 容量受限车辆路径问题(CVRP) 模型。
通过在一个通用框架下统一CP、SMT和MIP方法,该存储库允许对不同的优化范式进行基准测试和比较。
______________________________________________________________________
安装与执行
该解决方案通过以下方式完全容器化 码头工人. 从项目根目录运行提供的PowerShell脚本:
.\run.ps1 -ArgsToPass - 这
-ArgsToPass参数取Python脚本名称(launcher.py)以及其他选项。
______________________________________________________________________
参数
共同
--model {CP, SMT, MIP}→ 选择要运行的模型。如果省略,则按顺序运行。--inst→ 选择实例编号。如果省略,则测试所有实例。
CP特定
-c, --chuffed→ 仅使用 哈哈大笑 求解器(禁用Gecode)。
> 注意:Gecode可能无法在Windows上运行;CP测试在Linux上运行。
SMT专用
-p, --prune→ 启用修剪。--n_sol→ 考虑用于修剪的启发式解决方案的数量(默认值:10)。-l, --load_heuristics→ 从文件加载启发式算法(确保可重复性)。-d, --debug→ 启用调试输出。
MIP特定
-g, --gurobi→ 启用Gurobi求解器(需要有效的许可证)。-s, --skip→ 跳过超过超时的实例。-l, --load_heuristics→ 从文件加载启发式算法(确保可重复性)。-d, --debug→ 启用调试输出。
______________________________________________________________________
使用示例
- 在所有实例上运行所有模型 (配置与报告结果相同):
.\run.ps1 -ArgsToPass "launcher.py", "-l", "-p", "-g", "-s"- 仅在实例1上运行MIP模型:
.\run.ps1 -ArgsToPass "launcher.py", "-l", "-p", "-g", "-s", "--model", "MIP", "--inst", "1"- 运行解决方案检查器:
.\run.ps1 -ArgsToPass "check_solution.py", "DAT", "res/"