蚁群算法优化

Posted 优化大师傅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蚁群算法优化相关的知识,希望对你有一定的参考价值。

%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
m = 50; %蚂蚁个数
Alpha = 1; %信息素重要程度参数
Beta = 5; %启发式因子重要程度参数
Rho = 0.1; %信息素蒸发系数
G = 200; %最大迭代次数
Q = 100; %信息素增加强度系数
C = [1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
    3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
    2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
    3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
    3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
    2370 2975]; %31 个省会城市坐标
%%%%%%%%%%%%%%%第一步:变量初始化%%%%%%%%%%%%%%
n = size(C,1); %n 表示问题的规模(城市个数)
D = zeros(n,n); %D 表示两个城市距离间隔矩阵
for i = 1:n
    for j = 1:n
        if i ~= j
            D(i,j) = ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
        else
            D(i,j) = eps;
        end
        D(j,i) = D(i,j);
    end
end
Eta = 1./D; %Eta 为启发因子,这里设为距离的倒数
Tau = ones(n,n); %Tau 为信息素矩阵
Tabu = zeros(m,n); %存储并记录路径的生成
NC = 1; %迭代计数器
R_best = zeros(G,n); %各代最佳路线
L_best = inf.*ones(G,1); %各代最佳路线的长度
figure(1); %优化解
while NC <= G
    %%%%%%%%%%第二步:将 m 只蚂蚁放到 n 个城市上%%%%%%%%%%
    Randpos = [];
    for i = 1:(ceil(m/n))
        Randpos = [Randpos,randperm(n)];
    end
    Tabu(:,1) = (Randpos(1,1:m))';
    %%%第三步: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
                    J(Jc) = k;
                    Jc = Jc+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);
            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
    %%%%%%%%%%%%%第四步:记录本次迭代最佳路线%%%%%%%%%%
    L = zeros(m,1);
    for i = 1:m
        R = Tabu(i,:);
        for j = 1:(n-1)
            L(i) = L(i)+D(R(j),R(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),:);
    %%%%%%%%%%%%%%%第五步:更新信息素%%%%%%%%%%%%%
    Delta_Tau = zeros(n,n);
    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);
        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;
    %%%%%%%%%%%%%%%第六步:禁忌表清零%%%%%%%%%%%%%
    Tabu = zeros(m,n);
    %%%%%%%%%%%%%%%%%历代最优路线%%%%%%%%%%%%%%%
    for i = 1:n-1
        plot([ C(R_best(NC,i),1), C(R_best(NC,i+1),1)],...
            [C(R_best(NC,i),2), C(R_best(NC,i+1),2)],'bo-');
        hold on;
    end
    plot([C(R_best(NC,n),1), C(R_best(NC,1),1)],...
        [C(R_best(NC,n),2), C(R_best(NC,1),2)],'ro-');
    title(['优化最短距离:',num2str(L_best(NC))]);
    hold off;
    pause(0.005);
    NC = NC+1;
end
%%%%%%%%%%%%%%%%%第七步:输出结果%%%%%%%%%%%%%%
Pos = find(L_best==min(L_best));
Shortest_Route = R_best(Pos(1),:); %最佳路线
Shortest_Length = L_best(Pos(1)); %最佳路线长度
figure(2),
plot(L_best)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')

 

基于MATLAB编程的蚁群算法格栅路径优化,基于蚁群算法的路径避障规划

目录

背影
蚁群算法的原理及步骤
基本定义
编程思路
适应度函数
算法的规则
特点
主要参数
代码
结果分析
展望

背影

格栅路径优化运算量大,可能解多,求解难度高的,可行解多的特点,一般都无法用直接求解,本文用蚁群算法进行求解,蚁群算法拥有更好的全局寻优能力,

蚁群算法

基本定义

将蚁群算法应用于解决优化问题的基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优

编程思路

蚂蚁找到最短路径要归功于信息素和环境,假设有两条路可从蚁窝通向食物,开始时两条路上的蚂蚁数量差不多:当蚂蚁到达终点之后会立即返回,距离短的路上的蚂蚁往返一次时间短,重复频率快,在单位时间里往返蚂蚁的数目就多,留下的信息素也多,会吸引更多蚂蚁过来,会留下更多信息素。而距离长的路正相反,因此越来越多的蚂蚁聚集到最短路径上来。
蚂蚁具有的智能行为得益于其简单行为规则,该规则让其具有多样性和正反馈。在觅食时,多样性使蚂蚁不会走进死胡同而无限循环,是一种创新能力;正反馈使优良信息保存下来,是一种学习强化能力。两者的巧妙结合使智能

以上是关于蚁群算法优化的主要内容,如果未能解决你的问题,请参考以下文章

智能算法---蚁群算法

matlab蚁群算法的优化计算——旅行商问题(TSP)优化matlab优化算法二十一

matlab蚁群算法的优化计算——旅行商问题(TSP)优化matlab优化算法二十一

蚁群算法

蚁群算法优化

优化求解基于matlab蚁群算法求解函数极值问题含Matlab源码 1201期