Simulación de Matlab para resolver el problema de TSP urbano basado en el algoritmo de optimización de colonias de hormigas ACO

Tabla de contenido

1. Descripción general del algoritmo de optimización de colonias de hormigas ACO

2. Resolver el problema de TSP urbano basado en el algoritmo de optimización de colonias de hormigas ACO

3.Programa central de MATLAB

4.Resultados de la simulación aco-tsp


1. Descripción general del algoritmo de optimización de colonias de hormigas ACO

       El algoritmo de optimización de colonias de hormigas ACO es un algoritmo biónico que resuelve problemas de optimización simulando el comportamiento de búsqueda de alimento de las hormigas en la naturaleza. Este algoritmo fue propuesto originalmente por el académico italiano M. Dorigo y otros en 1992, y se aplicó con éxito para resolver el problema del viajante (TSP). Cuando las hormigas buscan comida, dejan en su camino una sustancia llamada feromona. Cuando las siguientes hormigas elijan caminos, tenderán a elegir caminos con altas concentraciones de feromonas. Al mismo tiempo, las hormigas también ajustarán la concentración de feromonas según la longitud del camino. Cuanto más corto sea el camino, mayor será la concentración de feromonas y más hormigas elegirán ese camino. A través de la iteración y actualización continua, eventualmente se puede encontrar la solución óptima.

       En el algoritmo ACO, se utilizan hormigas artificiales para simular el comportamiento de hormigas reales. Cada hormiga artificial buscará de forma independiente soluciones factibles en el espacio de soluciones y dejará feromonas en las soluciones. Cuanto mejor sea la solución, más feromonas quedarán. A medida que avanza el algoritmo, la concentración de feromonas en el camino de la solución óptima aumentará gradualmente y cada vez más hormigas elegirán este camino. Con el tiempo, toda la colonia de hormigas convergerá hacia la solución óptima o casi óptima.
       En el algoritmo ACO, la probabilidad de que cada hormiga elija el siguiente nodo se puede expresar mediante la siguiente fórmula:

p_ij = [tau_ij^alpha] / [suma_{k en permitido_k} tau_ik^alpha]

       Entre ellos, p_ij representa la probabilidad de que las hormigas pasen del nodo i al nodo j, tau_ij representa la concentración de feromonas entre el nodo i y el nodo j, alfa representa la importancia de la concentración de feromonas y permitido_k representa el conjunto de nodos que las hormigas no han visitado.

Después de cada iteración, la concentración de feromonas en cada nodo se actualiza según la siguiente fórmula:

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

       Entre ellos, rho representa la tasa de volatilización de feromonas, m representa el número de hormigas y delta_tau_ij^k representa el incremento de concentración de feromonas que deja la k-ésima hormiga entre el nodo i y el nodo j. delta_tau_ij^k se puede calcular usando la siguiente fórmula:

delta_tau_ij^k = Q / L_k

Entre ellos, Q representa una constante y L_k representa la longitud del camino de la k-ésima hormiga.

       Además, existen otros parámetros y fórmulas que se utilizan para controlar la velocidad de convergencia y el rango de búsqueda del algoritmo, como el número de hormigas, el número de iteraciones, la concentración inicial de feromonas, etc. La elección de estos parámetros debe adaptarse a las características y escala del problema específico.

2. Resolver el problema de TSP urbano basado en el algoritmo de optimización de colonias de hormigas ACO

      El problema TSP es un problema clásico de optimización combinatoria que requiere encontrar un camino más corto que visite cada ciudad exactamente una vez en un conjunto dado de ciudades y minimice la longitud total del camino. El problema TSP es un problema NP-difícil, es decir, la solución óptima no se puede encontrar en tiempo polinomial.

       Al resolver el problema de TSP urbano basado en el algoritmo de optimización de colonias de hormigas ACO, consideramos cada ciudad como un nodo y la distancia entre ciudades como el peso del borde. Cada hormiga parte desde el punto de partida, visita cada ciudad por turno y finalmente regresa al punto de partida. Al visitar cada ciudad, las hormigas elegirán la siguiente ciudad a visitar en función de la concentración de feromonas y la distancia entre la ciudad actual y la ciudad no visitada. En concreto, la probabilidad de que una hormiga elija la siguiente ciudad se puede expresar mediante la siguiente fórmula:

p_ij = [tau_ij^alpha] / [suma_{k en permitido_k} tau_ik^alpha]

       Entre ellos, p_ij representa la probabilidad de que las hormigas vayan de la ciudad i a la ciudad j, tau_ij representa la concentración de feromonas entre la ciudad i y la ciudad j, alfa representa la importancia de la concentración de feromonas y permitido_k representa el conjunto de ciudades que las hormigas no han visitado.

      En cada iteración, cada hormiga elegirá la siguiente ciudad a visitar según la fórmula anterior hasta visitar todas las ciudades y regresar al punto de partida. Luego calculamos el incremento en la concentración de feromonas entre cada ciudad en función de la longitud del camino de cada hormiga. Específicamente, el incremento de la concentración de feromonas se puede expresar mediante la siguiente fórmula:

delta_tau_ij = Q/L_k

      Entre ellos, delta_tau_ij representa el incremento de la concentración de feromonas de la ciudad i a la ciudad j, Q representa una constante y L_k representa la longitud del camino de la k-ésima hormiga.

       Finalmente, actualizaremos la concentración de feromonas entre cada ciudad para usarla en la próxima iteración. Específicamente, la actualización de la concentración de feromonas se puede expresar mediante la siguiente fórmula:

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

       Entre ellos, rho representa la tasa de volatilización de feromonas, m representa el número de hormigas y delta_tau_ij^k representa el incremento de concentración de feromonas que deja la k-ésima hormiga entre la ciudad i y la ciudad j.

      A través de la iteración y actualización continua de los pasos anteriores, finalmente se puede encontrar la solución óptima. Cabe señalar que en aplicaciones prácticas, es posible que sea necesario optimizar y mejorar el algoritmo para adaptarse a diferentes tamaños y complejidades de problemas. Además, el algoritmo de optimización de colonias de hormigas también tiene algunas limitaciones, como que es fácil caer en la solución óptima local. Por lo tanto, los parámetros y configuraciones deben seleccionarse cuidadosamente en aplicaciones prácticas para garantizar la efectividad y confiabilidad del algoritmo.

      Cabe señalar que aunque el algoritmo ACO ha logrado buenos resultados en la resolución de problemas de TSP, también tiene algunas limitaciones. Por ejemplo, para problemas complejos y de gran escala, el algoritmo puede requerir mucho tiempo y recursos informáticos para encontrar la solución óptima; al mismo tiempo, el algoritmo también es propenso a caer en soluciones óptimas locales. Por lo tanto, los parámetros y configuraciones deben seleccionarse cuidadosamente en aplicaciones prácticas para garantizar la efectividad y confiabilidad del algoritmo.

3.Programa central de 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

4.Resultados de la simulación aco-tsp

Supongo que te gusta

Origin blog.csdn.net/ccsss22/article/details/133446521
Recomendado
Clasificación