1. 物流配送中心选址问题概述
物流配送中心选址是供应链管理中的经典优化问题,其核心目标是在满足客户需求的前提下,选择最优的配送中心位置和配送方案,以最小化运输成本。这个问题属于NP难问题,当规模较大时,传统数学规划方法难以在合理时间内求得最优解。
在实际应用中,我们通常会遇到以下典型场景:
- 某区域有N个需求点(如快递揽收站)
- 需要从M个候选配送中心中选择最优组合
- 每个配送中心有最大容量限制
- 每个需求点只能由一个配送中心服务
- 目标是最小化总运输成本(通常与距离成正比)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 遗传算法求解框架设计
2.1 染色体编码方案
在遗传算法中,我们采用直接编码方式:
- 染色体长度等于需求点数量
- 每个基因位表示对应需求点分配的配送中心编号
- 例如:[2 1 3]表示:
- 第1个需求点由配送中心2服务
- 第2个需求点由配送中心1服务
- 第3个需求点由配送中心3服务
这种编码直观且易于实现交叉、变异等遗传操作。
2.2 适应度函数设计
适应度函数需要同时考虑:
- 运输成本(目标最小化)
- 容量约束(硬约束)
matlab复制function total_cost = fitness(chromo, dist_matrix, demand, capacity)
% chromo: 染色体编码
% dist_matrix: 距离矩阵(dist_matrix(i,j)表示需求点i到配送中心j的距离)
% demand: 各需求点的需求量
% capacity: 各配送中心的容量
centers = unique(chromo); % 当前使用的配送中心
total_demand = accumarray(chromo', demand); % 各中心承载需求
% 超载惩罚计算
penalty = sum(max(total_demand - capacity(centers), 0))*1000;
% 计算实际运输距离
route_cost = sum(arrayfun(@(i) dist_matrix(chromo(i), i), 1:length(chromo)));
total_cost = route_cost + penalty; % 最终适应度
end
关键点说明:
accumarray函数高效统计各配送中心的总需求- 超载惩罚系数设为1000确保无效解被淘汰
arrayfun实现向量化计算,提升效率
2.3 种群初始化策略
纯随机初始化会产生大量无效解(违反容量约束),我们采用随机分配+贪心修正的策略:
matlab复制function pop = init_pop(pop_size, num_sites, num_centers, capacity, demand)
pop = zeros(pop_size, num_sites);
for i=1:pop_size
% 初始随机分配
temp = randi(num_centers, 1, num_sites);
% 贪心修正:确保容量约束
while true
used_centers = unique(temp);
demands = accumarray(temp', demand);
overload = find(demands > capacity(used_centers));
if isempty(overload), break; end
% 对超载站点重新分配
for c = overload'
sites = find(temp == used_centers(c));
to_move = sites(randperm(length(sites),1));
temp(to_move) = randi(num_centers);
end
end
pop(i,:) = temp;
end
end
这种策略的优势:
- 保持初始种群的多样性
- 避免大量无效解浪费计算资源
- 修正过程计算量小
3. 遗传操作实现细节
3.1 改进的顺序交叉(OX)操作
传统OX交叉会破坏配送中心与需求点的关联关系,我们采用稳定模式的改进OX:
matlab复制function chi
