自适应离散粒子群算法求解TSP问题

基于自适应离散粒子群优化(ADPSO)算法求解旅行商问题(TSP)


一、算法原理与改进策略

1. 核心改进点

  • 离散化粒子表示:将连续空间映射为城市排列序列(如表示城市访问顺序)
  • 自适应参数调整:动态调整惯性权重和学习因子
  • 混合搜索机制:结合3-opt局部优化与量子势阱引导

2. 数学模型

粒子位置更新公式

\(x_i^{new} = \text{Swap}(x_i^{old}, \text{Pbest}_i, \text{Gbest})\)

其中\(Swap\)操作通过概率选择交换城市位置

自适应惯性权重

\(w = w_{min} + (w_{max}-w_{min}) \cdot \frac{f_{gbest}-f_i}{f_{gbest}-f_{avg}}\)

\(f_i\)\(f_{avg}\)为群体平均适应度


二、算法实现步骤

1. 初始化阶段

%% 参数设置
nCities = 20;    % 城市数量
maxIter = 1000;  % 最大迭代次数
wRange = [0.4,0.9]; % 惯性权重范围
c1 = 1.5; c2 = 1.5; % 学习因子

%% 城市坐标生成
cities = rand(nCities,2)*100;

%% 粒子群初始化
particles = zeros(nPop,nCities);
for i = 1:nPop
    particles(i,:) = randperm(nCities);
end
pbest = particles;
gbest = particles(1,:);

2. 自适应速度更新

%% 计算适应度
distMatrix = pdist2(cities,cities);
fitness = @(x) sum(diag(distMatrix(x,1:end-1)) + distMatrix(x(end),x));

%% 自适应参数调整
f_avg = mean(fitness(particles));
for i = 1:nPop
    w = wRange(1) + (wRange(2)-wRange(1))*(fitness(gbest)-fitness(particles(i)))/(f_avg-fitness(gbest));
    
    % 更新交换序
    v = updateVelocity(particles(i,:), pbest(i,:), gbest, w, c1,c2);
    
    % 位置更新(顺序交叉)
    particles(i,:) = orderCrossover(particles(i,:), v);
end

3. 混合优化机制

%% 3-opt局部优化
function new_route = threeOpt(route)
    n = length(route);
    best = route;
    improved = true;
    
    while improved
        improved = false;
        for i = 1:n-2
            for j = i+2:n
                new_route = route;
                new_route(i:j) = route(j:-1:i);
                if fitness(new_route) < fitness(best)
                    best = new_route;
                    improved = true;
                end
            end
        end
    end
end

参考代码 自适应离散粒子群算法求解TSP问题,包含有三个基本实例,其中含扰动变量可防止陷入局部最优 youwenfan.com/contentcna/64842.html

三、总结

自适应离散粒子群算法通过动态参数调整、混合优化策略和量子势阱引导,在TSP问题求解中展现出显著优势。

posted @ 2025-07-24 16:54  小前端攻城狮  阅读(32)  评论(0)    收藏  举报