Simulation Matlab pour résoudre le problème du TSP urbain basée sur l'algorithme d'optimisation des colonies de fourmis ACO

Table des matières

1. Présentation de l'algorithme d'optimisation des colonies de fourmis ACO

2. Résolution du problème du TSP urbain basé sur l'algorithme d'optimisation des colonies de fourmis ACO

3.Programme de base MATLAB

Résultats de simulation 4.aco-tsp


1. Présentation de l'algorithme d'optimisation des colonies de fourmis ACO

       L'algorithme d'optimisation des colonies de fourmis ACO est un algorithme bionique qui résout les problèmes d'optimisation en simulant le comportement de recherche de nourriture des fourmis dans la nature. Cet algorithme a été initialement proposé par le chercheur italien M. Dorigo et ses collègues en 1992, et a été appliqué avec succès pour résoudre le problème du voyageur de commerce (TSP). Lorsque les fourmis recherchent de la nourriture, elles laissent derrière elles une substance appelée phéromone sur leur chemin. Lorsque les fourmis suivantes choisiront des chemins, elles auront tendance à choisir des chemins avec des concentrations élevées de phéromones. Dans le même temps, les fourmis ajusteront également la concentration de phéromone en fonction de la longueur du trajet. Plus le chemin est court, plus la concentration de phéromones sera élevée et plus les fourmis choisiront ce chemin. Grâce à des itérations et des mises à jour continues, la solution optimale peut éventuellement être trouvée.

       Dans l’algorithme ACO, des fourmis artificielles sont utilisées pour simuler le comportement de vraies fourmis. Chaque fourmi artificielle recherchera indépendamment des solutions réalisables dans l'espace de solution et laissera des phéromones sur les solutions. Plus la solution est bonne, plus il reste de phéromones. Au fur et à mesure que l'algorithme progresse, la concentration de phéromones sur le chemin de solution optimal augmentera progressivement et de plus en plus de fourmis choisiront ce chemin. Finalement, toute la colonie de fourmis convergera vers la solution optimale ou quasi optimale.
       Dans l'algorithme ACO, la probabilité que chaque fourmi choisisse le nœud suivant peut être exprimée par la formule suivante :

p_ij = [tau_ij^alpha] / [sum_{k dans Allow_k} tau_ik^alpha]

       Parmi eux, p_ij représente la probabilité qu'il y ait des fourmis du nœud i au nœud j, tau_ij représente la concentration de phéromones entre le nœud i et le nœud j, alpha représente l'importance de la concentration de phéromones et autorisé_k représente l'ensemble des nœuds que les fourmis n'ont pas visités.

Après chaque itération, la concentration en phéromones sur chaque nœud est mise à jour selon la formule suivante :

tau_ij = (1 - rho) * tau_ij + sum_{k=1}^m delta_tau_ij^k

       Parmi eux, rho représente le taux de volatilisation de la phéromone, m représente le nombre de fourmis et delta_tau_ij^k représente l'incrément de concentration de phéromone laissé par la k-ème fourmi entre le nœud i et le nœud j. delta_tau_ij^k peut être calculé à l'aide de la formule suivante :

delta_tau_ij^k = Q / L_k

Parmi eux, Q représente une constante et L_k représente la longueur du trajet de la k-ème fourmi.

       De plus, d'autres paramètres et formules sont utilisés pour contrôler la vitesse de convergence et la plage de recherche de l'algorithme, tels que le nombre de fourmis, le nombre d'itérations, la concentration initiale de phéromone, etc. Le choix de ces paramètres doit être adapté aux caractéristiques et à l’ampleur du problème spécifique.

2. Résolution du problème du TSP urbain basé sur l'algorithme d'optimisation des colonies de fourmis ACO

      Le problème TSP est un problème d'optimisation combinatoire classique qui nécessite de trouver un chemin le plus court qui visite chaque ville exactement une fois dans un ensemble de villes donné et qui minimise la longueur totale du chemin. Le problème TSP est un problème NP-difficile, c'est-à-dire que la solution optimale ne peut pas être trouvée en temps polynomial.

       En résolvant le problème du TSP urbain basé sur l'algorithme d'optimisation des colonies de fourmis ACO, nous considérons chaque ville comme un nœud et la distance entre les villes comme le poids du bord. Chaque fourmi part du point de départ, visite tour à tour chaque ville et revient enfin au point de départ. Lors de la visite de chaque ville, les fourmis choisiront la prochaine ville à visiter en fonction de la concentration de phéromones et de la distance entre la ville actuelle et la ville non visitée. Plus précisément, la probabilité qu'une fourmi choisisse la prochaine ville peut être exprimée par la formule suivante :

p_ij = [tau_ij^alpha] / [sum_{k dans Allow_k} tau_ik^alpha]

       Parmi eux, p_ij représente la probabilité qu'il y ait des fourmis de la ville i à la ville j, tau_ij représente la concentration de phéromones entre la ville i et la ville j, alpha représente l'importance de la concentration de phéromones et autorisé_k représente l'ensemble des villes que les fourmis n'ont pas visitées.

      À chaque itération, chaque fourmi choisira la prochaine ville à visiter en fonction de la formule ci-dessus jusqu'à ce qu'elle visite toutes les villes et revienne au point de départ. Nous calculons ensuite l’augmentation de la concentration de phéromones entre chaque ville en fonction de la longueur du trajet de chaque fourmi. Plus précisément, l’augmentation de la concentration en phéromones peut être exprimée par la formule suivante :

delta_tau_ij = Q / L_k

      Parmi eux, delta_tau_ij représente l'incrément de concentration de phéromones de la ville i à la ville j, Q représente une constante et L_k représente la longueur du trajet de la k-ième fourmi.

       Enfin, nous mettrons à jour la concentration de phéromones entre chaque ville pour une utilisation lors de la prochaine itération. Plus précisément, la mise à jour de la concentration en phéromones peut être exprimée par la formule suivante :

tau_ij = (1 - rho) * tau_ij + sum_{k=1}^m delta_tau_ij^k

       Parmi eux, rho représente le taux de volatilisation de la phéromone, m représente le nombre de fourmis et delta_tau_ij^k représente l'incrément de concentration de phéromone laissé par la k-ème fourmi entre la ville i et la ville j.

      Grâce à une itération et une mise à jour continues des étapes ci-dessus, la solution optimale peut enfin être trouvée. Il convient de noter que dans les applications pratiques, l’algorithme peut devoir être optimisé et amélioré pour s’adapter à différentes tailles et complexités de problèmes. De plus, l’algorithme d’optimisation des colonies de fourmis présente également certaines limites, par exemple, il est facile de tomber dans la solution optimale locale. Par conséquent, les paramètres et réglages doivent être soigneusement sélectionnés dans les applications pratiques pour garantir l’efficacité et la fiabilité de l’algorithme.

      Il convient de noter que bien que l’algorithme ACO ait obtenu de bons résultats dans la résolution des problèmes TSP, il présente également certaines limites. Par exemple, pour des problèmes complexes et à grande échelle, l'algorithme peut nécessiter beaucoup de temps et de ressources informatiques pour trouver la solution optimale ; en même temps, l'algorithme a également tendance à tomber dans des solutions optimales locales. Par conséquent, les paramètres et réglages doivent être soigneusement sélectionnés dans les applications pratiques pour garantir l’efficacité et la fiabilité de l’algorithme.

3.Programme de base MATLAB

.......................................................................              
while NC<=NC_max        %停止条件之一:达到最大迭代次数,停止
    %%2.将m只蚂蚁放到n个城市上
    Randpos=[];   %随即存取
    for i=1:(ceil(m/n))
        Randpos=[Randpos,randperm(n)];
    end
    Tabu(:,1)=(Randpos(1,1:m))';   
    %%3.m只蚂蚁按概率函数选择下一座城市,完成各自的周游
    for j=2:n     %所在城市不计算
        for i=1:m
            visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问
            J=zeros(1,(n-j+1));       %待访问的城市
            P=J;                      %待访问城市的选择概率分布
            Jc=1;
            for k=1:n
                if length(find(visited==k))==0   %开始时置0
                    J(Jc)=k;
                    Jc=Jc+1;                         %访问的城市个数自加1
                end
            end
            %下面计算待选城市的概率分布
            for k=1:length(J)
                P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
            end
            P=P/(sum(P));
            %按概率原则选取下一个城市
            Pcum=cumsum(P);     %cumsum,元素累加即求和
            Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线
            to_visit=J(Select(1));
            Tabu(i,j)=to_visit;
        end
    end
    if NC>=2
        Tabu(1,:)=R_best(NC-1,:);
    end
    %%4.记录本次迭代最佳路线
    L=zeros(m,1);     %开始距离为0,m*1的列向量
    for i=1:m
        R=Tabu(i,:);
        for j=1:(n-1)
            L(i)=L(i)+D(R(j),R(j+1));    %原距离加上第j个城市到第j+1个城市的距离
        end
        L(i)=L(i)+D(R(1),R(n));      %一轮下来后走过的距离
    end
    L_best(NC)=min(L);           %最佳距离取最小
    pos=find(L==L_best(NC));
    R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线
    L_ave(NC)=mean(L);           %此轮迭代后的平均距离
    NC=NC+1                      %迭代继续
 
 
    %%5.更新信息素
    Delta_Tau=zeros(n,n);        %开始时信息素为n*n的0矩阵
    for i=1:m
        for j=1:(n-1)
            Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
            %此次循环在路径(i,j)上的信息素增量
        end
        Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
        %此次循环在整个路径上的信息素增量
    end
    Tau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素
    %%6.禁忌表清零
    Tabu=zeros(m,n);             %直到最大迭代次数
end
%%7.输出结果及绘图
Pos=find(L_best==min(L_best));   %找到最佳路径(非0为真)
Shortest_Route=R_best(Pos(1),:)  %最大迭代次数后最佳路径
Shortest_Length=L_best(Pos(1))   %最大迭代次数后最短距离 
toc                   %计时结束
N=length(R);
scatter(C(:,1),C(:,2));
 hold on
 plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'r')
 hold on
for ii=2:N
    plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'r')
     hold on
end
xlabel('城市位置横坐标')
ylabel('城市位置纵坐标')
title(['蚁群算法(最短距离):' num2str(Shortest_Length) ''])
up2224

Résultats de simulation 4.aco-tsp

Je suppose que tu aimes

Origine blog.csdn.net/ccsss22/article/details/133446521
conseillé
Classement