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