一篇文献的完整复现,一条从"数据还原 → 模型初选 → 综合评价 → 可视化"的选址技术路线。
本文源自对李秀丽等《基于集合覆盖模型和线性加权和法的选址问题研究------以兰州和平高校聚集区应急物流中心选址为例》(《物流科技》2024 年第 47 卷第 17 期)的 MATLAB 复现,代码、数据、图表均已跑通并对齐原文结论。
一、研究背景:为什么要做应急物流中心选址
应急物流是突发事件(自然灾害、公共卫生事件、重大安全事故)下的"生命线"。它的核心矛盾在于:应急物资必须在极短的黄金时间内送达需求点,而设施选址一旦定错,后续的调度、库存、配送效率都会被"锁死"。
本文的研究对象是兰州和平高校聚集区。这个区域的特点是人口高度集中、高校与居民区交错,一旦发生突发事件,对物资时效性的要求极高。文章把问题抽象为两步:
- 覆盖问题:在"20 分钟可达"的硬约束下,用最少数量、又能覆盖全部需求点的设施点,先做一轮"初选"。
- 评价问题:对初选筛出的候选点,用多指标综合评价,最终"择优"出一个最优选址。
这种"先覆盖、后评价 "的两阶段思路,恰好对应了两个经典运筹学工具------集合覆盖模型(Set Covering Model) 与 线性加权和法(Linear Weighted Sum Method)。
很多人在做选址时只盯着"距离最近"或"成本最低"单一目标,忽略了"全覆盖"这个硬约束和"多指标权衡"这个软需求。本文的价值正在于把两者串联起来,给出了一条可复现、可迁移的技术路线。
二、主要功能:这套代码到底做了什么
复现脚本 main.m 完成了三件事:
| 模块 | 内容 | 对应文献 |
|---|---|---|
| 数据复现 | 还原 9 个需求点、时空距离矩阵、评价指标体系与权重 | 图 1、表 1、表 2、表 4 |
| 方法复现 | 集合覆盖模型初选 + 线性比例变换标准化 + 线性加权和法评价 | 2.2、2.3 节 |
| 可视化 | 选址示意图、雷达图、权重分布图、加权总分对比图及 4 张补充图表 | 图 1、表 5、表 6 |
最终产出 8 张高清图片(300 dpi),并自动在命令行打印全部中间结果,方便核对复现是否与原文一致。
三、技术路线:一张图看懂全流程
整体流程可以概括为四个阶段:

四、算法步骤详解
4.1 集合覆盖模型:先解决"全覆盖"的硬约束
集合覆盖问题的标准形式是:在候选设施点集合中,选出数量最少的子集,使其覆盖全部需求点。用数学语言描述:
min∑j∈Jxj\min \sum_{j \in J} x_jminj∈J∑xj
s.t.∑j∈Nixj≥1,∀i∈I\text{s.t.} \quad \sum_{j \in N_i} x_j \ge 1, \quad \forall i \in Is.t.j∈Ni∑xj≥1,∀i∈I
其中 xj∈{0,1}x_j \in \{0,1\}xj∈{0,1} 表示是否在 jjj 点建站,NiN_iNi 是"能覆盖需求点 iii"的候选点集合。由于原文假设每个备选点服务能力无上限,这里只需考虑覆盖距离约束(≤ 20 min),无需容量约束,问题被大大简化。
具体步骤如下:
Step 1:构建时空距离矩阵。 依据《道路交通安全法实施条例》中"同方向只有 1 条机动车道的城市道路限速 50 km/h"推算各需求点之间的"时间距离"(分钟)。两需求点间时间距离 ≤ 20 min 记为"可覆盖",否则为 Inf。
Step 2:构建覆盖矩阵。 定义 cover(i,j) = 1 表示需求点 iii 处于以 jjj 为设施点的 20 min 服务范围内,并据此算出:
- A(j)A(j)A(j):以 jjj 为设施点所能覆盖的需求点集合(服务集合)
- B(i)B(i)B(i):能覆盖需求点 iii 的候选设施点集合(备选集合)
对应原文表 1,复现得到的 9 个服务集合如下:
| 编号 j | A(j)(20min 内覆盖的需求点) |
|---|---|
| 1 | {1,2,3,4} |
| 2 | {1,2,3} |
| 3 | {1,2,3,4,5} |
| 4 | {1,3,4,5,6,7} |
| 5 | {3,4,5,6} |
| 6 | {4,5,6,7,8} |
| 7 | {4,6,7,8} |
| 8 | {6,7,8,9} |
| 9 | {8,9} |
Step 3:支配集约简。 这是集合覆盖问题里的一个经典剪枝技巧:若某需求点的覆盖集合是另一个需求点覆盖集合的子集,则该点可被"支配"删除(因为选了那个更大的点,就自动覆盖了这个更小的点)。
例如 A(2)={1,2,3}⊂A(3)={1,2,3,4,5}A(2)=\{1,2,3\} \subset A(3)=\{1,2,3,4,5\}A(2)={1,2,3}⊂A(3)={1,2,3,4,5},所以 2 号点被支配、可删除。依次消去后,保留的候选点为:
{3,4,6,8}\{3, 4, 6, 8\}{3,4,6,8}
即 薇乐如意园(3)、薇乐花园(4)、兰州工商学院(6)、润新佳苑(8)。
Step 4:穷举最小覆盖。 候选点规模小(仅 4 个),直接枚举全部非空子集(24−1=152^4-1=1524−1=15 种),找出能覆盖全部 9 个需求点的最小组合。结果唯一的 2 点组合为:
{3,8}\{3, 8\}{3,8}
即 D3(薇乐如意园)覆盖 1~5 号需求点,D8(润新佳苑)覆盖 6~9 号需求点,实现全区域覆盖。
matlab
% 穷举最小覆盖(核心代码)
for mask = 1:(2^nCand - 1)
sel = candidateIdx(logical(bitget(mask, 1:nCand)));
covered = unique([A{sel}]);
if numel(covered) == nPoint && numel(sel) < minNum
minNum = numel(sel); minCombos = {sel};
end
end
4.2 线性加权和法:再解决"哪个更好"的软权衡
集合覆盖模型只回答了"至少要几个、哪几个",但多个最优组合并存时(这里是 {3,8} 一组),仍需要一个评价机制来"择优"。文章用 7 个指标 + 线性加权和法对 D3、D8 两个候选点打分。
Step 1:指标体系与权重。 7 个指标中有 6 个是效益型 (越大越好),1 个是成本型(越小越好),权重之和为 1:
| 指标 | 类型 | 权重 |
|---|---|---|
| 交通便利性 | 效益型 | 0.33 |
| 水电通讯等辅助设施 | 效益型 | 0.10 |
| 所在区域需求量 | 效益型 | 0.05 |
| 物流专业人才的可获得性 | 效益型 | 0.13 |
| 覆盖能力 | 效益型 | 0.15 |
| 投建成本 | 成本型 | 0.20 |
| 服务柔性 | 效益型 | 0.04 |
Step 2:定性指标量化(七档量化表)。 除"所在区域需求量"是定量指标外,其余定性指标统一映射到 0~10 分:
- 效益型:最低 0 / 很低 1 / 低 3 / 一般 5 / 高 7 / 很高 9 / 最高 10
- 成本型:最高 10 / 很高 9 / 高 7 / 一般 5 / 低 3 / 很低 1 / 最低 0
量化结果矩阵 XXX(7 行指标 × 2 列候选点)为:
| 指标 | 薇乐如意园(D3) | 润新佳苑(D8) |
|---|---|---|
| 交通便利性 | 7 | 5 |
| 水电通讯等辅助设施 | 9 | 5 |
| 所在区域需求量 | 8 | 3 |
| 物流专业人才的可获得性 | 7 | 3 |
| 覆盖能力 | 7 | 7 |
| 投建成本 | 7 | 3 |
| 服务柔性 | 7 | 5 |
Step 3:线性比例变换标准化。 为消除量纲、统一方向,采用线性比例变换:
- 效益型:rij=xijmaxjxijr_{ij} = \dfrac{x_{ij}}{\max\limits_j x_{ij}}rij=jmaxxijxij
- 成本型:rij=minjxijxijr_{ij} = \dfrac{\min\limits_j x_{ij}}{x_{ij}}rij=xijjminxij
Step 4:线性加权求和。 加权总分定义为:
U(Ai)=∑j=1nwj⋅rijU(A_i) = \sum_{j=1}^{n} w_j \cdot r_{ij}U(Ai)=j=1∑nwj⋅rij
最终结果:
U(薇乐如意园)=0.8858>U(润新佳苑)=0.7443U(\text{薇乐如意园}) = 0.8858 > U(\text{润新佳苑}) = 0.7443U(薇乐如意园)=0.8858>U(润新佳苑)=0.7443
最优选址:薇乐如意园(D3),与原文结论完全一致。
五、公式原理小结
整篇文章的方法内核其实很简洁,就三个公式:
(1)集合覆盖模型
min∑jxj,∑j∈Nixj≥1\min \sum_{j} x_j, \quad \sum_{j \in N_i} x_j \ge 1minj∑xj,j∈Ni∑xj≥1
(2)线性比例变换标准化(区分指标方向)
rij=xijxjmax (效益型),rij=xjminxij (成本型)r_{ij} = \frac{x_{ij}}{x_j^{\max}} \ (\text{效益型}), \quad r_{ij} = \frac{x_j^{\min}}{x_{ij}} \ (\text{成本型})rij=xjmaxxij (效益型),rij=xijxjmin (成本型)
(3)线性加权和法
Ui=∑jwjrij,∑jwj=1U_i = \sum_j w_j r_{ij}, \quad \sum_j w_j = 1Ui=j∑wjrij,j∑wj=1
三个公式环环相扣:覆盖模型负责"删得对",标准化负责"比得公平",加权和负责"选得优"。
六、参数设定一览
| 参数 | 取值 | 说明 |
|---|---|---|
| 需求点数量 | 9 | 高校聚集区人口集中点 |
| 服务半径 R_service | 20 min | 应急物流时效性标准 |
| 道路限速依据 | 50 km/h | 《道路交通安全法实施条例》 |
| 候选点(支配集约简后) | {3,4,6,8} | 集合覆盖初选 |
| 最小覆盖组合 | {3,8} | 2 个设施点覆盖全部 9 点 |
| 指标数量 | 7 | 6 效益型 + 1 成本型 |
| 权重向量 | 0.33, 0.10, 0.05, 0.13, 0.15, 0.20, 0.04 | 和为 1 |
| 量化分值 | 0~10(七档) | 效益型/成本型方向相反 |
注意:需求点坐标是示意坐标(依据相对方位人工布置,仅用于可视化),不是精确经纬度。这一点在脚本里也明确标注了,避免读者误解为真实地理坐标。
七、运行环境
- 运行环境 :MATLAB R2024b(Windows)
复现步骤:
八、结果解读(配图)
图 1:选址结果示意图

图中蓝色虚线圆是 D3(薇乐如意园)的覆盖范围,覆盖 1~5 号需求点;橙色虚线圆是 D8(润新佳苑)的覆盖范围,覆盖 6~9 号需求点。绿色方块是另外两个候选点(4、6 号),星形是最终确定的最优中心。
图 2:标准化指标雷达图

雷达图直观地展示了两个候选点在 7 个维度上的标准化得分。可以明显看出:D3 在"交通便利性""水电通讯""区域需求量""人才可获得性"上全面领先,D8 仅在"投建成本"(成本型标准化后反而更高)上占优。这也解释了为什么 D3 能胜出。
图 3:指标权重分布图

权重分布揭示了决策偏好:交通便利性(0.33)与投建成本(0.20)合计超过一半,是选址中最重要的两个维度。这说明应急物流中心既强调"送得快",也强调"建得起"。
图 4:加权总分对比图

最终加权总分 0.8858 vs 0.7443,D3 明显占优。这张图是决策的"最后一锤"。
图 5~8:补充图表




这四张补充图分别展示了:20min 覆盖网络关系(图 5)、原始量化值分组对比(图 6)、标准化矩阵热力图(图 7)、以及各指标对总分的加权贡献堆积(图 8)。热力图尤其直观------D3 那一列几乎全是 1.0(深色),只有"投建成本"一格偏浅。
九、应用场景
这条"集合覆盖 + 线性加权和"的技术路线,具有很强的通用性,可以迁移到:
- 应急/救灾物资储备库选址:用服务半径覆盖受灾点,用多指标择优;
- 消防站、急救中心、派出所选址:本质都是"在时效约束下覆盖需求点";
- 充电桩、快递驿站、社区团购自提点选址:覆盖约束换成步行/骑行距离即可;
- 5G 基站、共享单车投放点布局:把"时间距离"换成"信号覆盖/服务半径"。
可扩展方向包括:加入容量约束 (把集合覆盖升级为"容量约束设施选址")、引入 P-中值/P-中心模型 、用 AHP/熵权法 替代主观权重、用 GIS 真实路网距离替代人工布置的示意坐标等。
十一、总结
本文完整复现了《物流科技》2024 年的一篇选址研究,并给出可运行的 MATLAB 代码与 8 张图表。结论可概括为:
- 集合覆盖模型把"全覆盖"从口号变成约束,初选出候选点 {3,4,6,8},并锁定最小覆盖组合 {3,8};
- 线性比例变换 + 线性加权和法 在 7 个指标上对两个候选点打分,最终以 0.8858 vs 0.7443 选定薇乐如意园为最优应急物流中心;
如果这篇文章对你有帮助,欢迎点赞、在看、转发。完整的 MATLAB 代码与数据已整理好,关注后可获取。
声明:本文为技术复现与学习笔记,文中结论均基于原文献数据与方法,需求点坐标为示意坐标,仅供教学与研究参考,不构成实际选址决策依据。