1. 遗传算法求解多旅行商问题(MTSP)的MATLAB实现
多旅行商问题(MTSP)是经典旅行商问题(TSP)的扩展版本,在实际物流配送、无人机巡检等领域有广泛应用。与单旅行商问题不同,MTSP需要考虑多个旅行商协同完成任务的情况,这使得问题的复杂度呈指数级增长。
我最近在物流路径优化项目中遇到了这个问题,经过反复尝试,最终采用遗传算法(GA)成功解决了这个NP难问题。下面将分享完整的MATLAB实现代码和关键思路,包含单起点和多起点两种模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题建模与算法设计
2.1 MTSP问题定义
MTSP可以形式化定义为:给定n个城市和m个旅行商,每个旅行商从指定起点出发,访问若干城市后返回起点,要求:
- 每个城市被恰好一个旅行商访问一次
- 所有旅行商的路径总长度最小
根据起点设置不同,分为两种模式:
- 单起点模式:所有旅行商从同一城市出发
- 多起点模式:每个旅行商有各自的出发城市
2.2 遗传算法设计思路
遗传算法模拟自然选择过程,通过选择、交叉、变异等操作逐步优化解的质量。针对MTSP特点,我们设计了以下关键组件:
-
染色体编码:采用两段式编码
- 第一部分:非起点城市的全排列
- 第二部分:每个旅行商分配的城市数量
-
适应度函数:直接计算所有旅行商路径总长度
-
遗传算子:
- 选择:锦标赛选择
- 交叉:顺序交叉(OX) + 单点交叉
- 变异:交换变异 + 数量转移变异
3. MATLAB代码实现详解
3.1 主函数框架
matlab复制function MTSP_GA_Solver()
%% 参数设置
% 问题规模
nCities = 30; % 城市总数
nSalesmen = 3; % 旅行商数量
% 模式选择
mode = 'single'; % 'single'或'multi'
% 遗传算法参数
popSize = 100; % 种群大小
maxGen = 200; % 最大迭代次数
crossoverProb = 0.8; % 交叉概率
mutationProb = 0.1; % 变异概率
% 城市坐标生成
rng(42); % 固定随机种子
cityCoords = rand(nCities, 2) * 100;
%% 初始化
% 距离矩阵计算
distMat = pdist2(cityCoords, cityCoords);
% 种群初始化
population = initializePopulation(popSize, nCities, nSalesmen, mode);
%% 主循环
for gen = 1:maxGen
% 计算适应度
[fitness
