蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真

来喽!

一、群体智能

1.1 群体

群体智能这个概念来自对自然界中一些昆虫,如蚂蚁、蜜蜂等。单只蚂蚁的智能并不高。然而,几只蚂蚁凑在一起,就可以一起往蚁穴搬运路上遇到的食物。而如果是一群蚂蚁,它们就能够协同工作,建起坚固、漂亮的巢穴,还能一起抵御危险、抚养后代。这种群居性生物表现出来的智能行为被称为群体智能。群体智能是在集体层面表现出来的分布式、无中心、自组织系统。

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第1张图片

图1 群体

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第2张图片

图2 蚁群

1.2 群体智能基本原则

MillonasMM在1994年提出群体智能应该遵循五条基本原则,分别为:

(1)邻近原则(Proximity Principle),群体能够进行简单的空间和时间计算;

(2)品质原则(Quality Principle),群体能够响应环境中的品质因子;

(3)多样性反应原则(Principleof Diverse Re-sponse),群体的行动范围不应该太窄;

(4)稳定性原则(Stability Principle),群体不应在每次环境变化时都改变自身的行为;

(5)适应性原则(Adaptability Principle),在所需代价不太高的情况下,群体能够在适当的时候改变自身的行为。

1.3 群体智能特点

(1)控制是分布式的,不存在中心控制。因而它更能够适应当前网络环境下的工作状态,并且具有较强的鲁棒性,即不会由于某一个或几个个体出现故障而影响群体对整个问题的求解。

(2)群体中的每个个体都能够改变环境,这是个体之间间接通信的一种方式,这种方式被称为“激发工作”(Stigmergy)。由于群体智能可以通过非直接通信的方式进行信息的传输与合作,因而随着个体数目的增加,通信开销的增幅较小,因此,它具有较好的可扩充性。

(3)群体中每个个体的能力或遵循的行为规则非常简单,因而群体智能的实现比较方便,具有简单性的特点。

(4)群体表现出来的复杂行为是通过简单个体的交互过程突现出来的智能(Emergent Intelli-gence),因此,群体具有自组织性。为了更进一步理解群体智能这个概念,本文分别从人工智能和复杂性科学的角度对这一概念进行说明。

1.4 蚁群算法简介

上世纪四十到五十年代,法国昆虫学家Paul Grass观察到一种白蚁的习性,他称之为“重大启示”。他观察到这种现象不仅可以被蚁群利用,还可以被其他群居性昆虫利用。他用术语“主动共识性”来描述这种独特的通信手段,即“通信个体被他们所获取的信息载体所刺激”。这种间接通信和其他通信形式的两个不同之处在于:

(1)这种形式是一种非直接、不同步的以环境为媒介的通信,昆虫通过改变周围环境来交换信息;

(2)这种形式中的信息有着本地化的属性,即它只能被那些路过信息所在路径的昆虫发现。例如,很多蚂蚁物种,工蚁外出寻找食物并在路上释放信息素,其他工蚁感知信息素的存在并趋向于跟随信息素浓度大的路径。通过这种机制,蚂蚁能够显著高效地向巢穴运送食物。

在著名的双桥实验中,阿根廷蚂蚁地巢穴被两座等长的桥连接到食物源,蚂蚁可以通过任一座桥寻找到食物,并且每只蚂蚁都会在路过的桥上释放信息素。在这个前提下,蚂蚁开始探索周边到达食物源。起初,蚂蚁会随机选择一座桥,随着时间地变化,一座桥的信息素浓度更高,因此吸引更多蚂蚁,并最终使整个蚁群选择同一座桥。

在另一个双桥实验中,其中一个桥要远比另一个桥长,在这个实验中初始选择的随机波动影响要比之前小,而选择短桥的蚂蚁总是先回到巢穴(或食物源)。短桥上的信息素释放要比长桥早,因此蚂蚁会倾向于选择短桥。

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第3张图片

图3 蚂蚁双桥实验 等距双桥(a) 非等距双桥(b)

二、蚁群算法理论

蚁群算法是对自然界蚂蚁的寻径方式进行模拟而得出的一种仿生算法。蚂蚁在运动过程中会留下信息素,蚂蚁在运动时又可以感知这种物质,来确定自己的运动方向。因此,大量蚂蚁组成的蚂蚁群体的集体行为表现出一种信息的正反馈现象。

2.1 真实蚁群觅食

若蚂蚁从A点出发,速度相同,食物在D点,则它可能随机选择路线ABD或者ACD。假设初始时每条路线只分配一只蚂蚁,每个时间单位行走一步。如图4,为8个时间单位时的情形。

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第4张图片

图4 蚂蚁出发后8个时间单位

图5表示经过16个时间单位的情形。

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第5张图片

图5 蚂蚁出发后16个时间单位

假设蚂蚁经过每一处留下一个单位的信息素,经过32个时间单位后,所有一开始出发的蚂蚁都在D点取得了食物。此时,ABD每一处信息素为4个单位,ACD每一处信息素为2个单位。

按照信息素的指引,蚁群在ABD路上增派一只蚂蚁,以此类推,ABD上的信息素越来越多,增派的蚂蚁也越来越多,最终按照信息素的指引,所有蚂蚁都会放弃ACD路线,这就是所谓的正反馈效应。

2.2 人工蚁群优化

TSP问题:每只蚂蚁的一步转移概率由每条边的参数决定:信息素值(信息素痕迹)、可见度(先验值)

信息素更新方式有两种:

挥发:所有路径上的信息素以一定比率减少。

增强:给评价‘好’的边增加信息素。

2.3 蚁群算法特点

(1)蚁群算法本质上是一种并行算法。每只蚂蚁搜索过程彼此独立。

(2)蚁群算法是一种自组织算法。简单说,就是系统从无序到有序的变化过程。

(3)蚁群算法具有较强鲁棒性。

(4)蚁群算法是正反馈算法。

三、蚁群算法及流程

在算法初始时刻,将m只蚂蚁随机的放到n座城市,同时将禁忌表tabu的第一个元素设置为当前所在城市。此时各路径上的信息素量相等,设

,(c是一个较小的常数),每只蚂蚁根据路径上残留的信息素和启发式信息(两城市间的距离)独立选择下一座城市,在

时刻,蚂蚁k从城市i转移到城市j的概率

为:

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第6张图片

式中,

表示蚂蚁k下一步允许选择的城市集合。禁忌表
记录了蚂蚁k当前走过的城市。当所有n座城市都加入到了禁忌表
中时,蚂蚁k便完成了一次周游。式中
是一个启发因子,通常取城市i到城市j之间距离的倒数,表示蚂蚁从城市i转移到城市j的期望程度。

当所有蚂蚁完成一次周游胡,各路径上的信息素根据式:

更新。

式中:

表示路径上信息素蒸发系数,
表示信息的持久性系数,
表示本次迭代边ij上的信息素增量,即:

式中:

表示第k只蚂蚁在本次迭代中留在边ij上的信息素量,如果蚂蚁k没有经过ij边,则
的值为0。
可以表示为

80cedd55625af10ab6706193ada19f1f.png

其中Q为正常数,

表示第k只蚂蚁在本次周游中所走过路径的长度。

M.Dorigo提出了三种蚁群算法模型,上述模型为ant-cycle模型,另外两个模型分别为ant-quantity模型和ant-destiny模型,差别主要在于

ant-quantity模型中为:

568728d86fae002035c649455dd423a9.png

ant-destiny模型中为:

f0113166635d4a45daa33abe83afcfa0.png

蚁群算法实际是正反馈原理和启发式算法相结合的一种算法,不仅利用了信息素还用到了启发式因子,实验结果表明ant-cycle模型比ant-quantity模型和ant-destiny模型具有更好地性能。因为ant-cycle模型利用全局信息更新路径上的信息量,而ant-quantity模型和ant-destiny模型使用局部信息。

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第7张图片

四、改进的蚁群算法

4.1 精英蚂蚁系统

该算法将一经发现的最好解称为

,而该路径在修改信息素轨迹时人工释放额外的信息素,以增强正反馈效果。公式为:

式中e是调整

影响权重的参数,
由下式给出:

0d6f767e04a3598c0af22730226de116.png

其中

是已知最优路径
的长度。

4.2 最大最小蚂蚁系统

为了克服基本蚁群中可能出现的停滞现象,Thomas Stutzle等人提出了最大—最小蚁群系统:

(1)每次循环后只有一只蚂蚁进行信息素更新。可以是大年循环中最优解(迭代最优蚂蚁),也可以是从实验开始依赖的最优解蚂蚁(全局最优蚂蚁)

(2)每个解的元素(TSP的每条边)上的信息素轨迹量的值域范围被限制在

区间内,而蚂蚁系统中信息轨迹量不被限制,使得一些路径轨迹量远高于其他边。

4.3 基于排序的蚁群算法

该算法中,每个蚂蚁释放的信息素按照它们的不同等级进行挥发,类似于精英算法,精英蚂蚁在每次循环中释放更多信息素。在修改信息素路径前,按照它们的旅行长度进行排名,蚂蚁释放信息素的量与他们的排名相乘。每次循环,只有排名前w-1只蚂蚁和精英蚂蚁才允许释放信息素,信息素如下所示:

d2f382cecef31896e6bd8ca942711fc1.png

是排名为r的蚂蚁的旅行长度

4.4 自适应蚁群算法

(1)每次循环结束后找出最优解,并保留。

(2)自适应改变

值。

98828d1156bc1b2574e39fc545f1e7b8.png

五、MATLAB实例仿真

参数说明:

信息素启发因子

:表示信息量对是否选择当前路径的影响程度。
的大小反映了蚁群路径搜索中随机性因素作用的强度。
一般取值为[1,4]

期望启发因子

:表示在搜索路径上信息素在知道蚂蚁选择路径时的向导性。期望启发因子
的值越大,在局部点上选择局部最短路径可能性就越大,
一般取值范围[3,5],
是关联性很强的一组参数。

信息素蒸发系数

过小,表示以前搜索过的路径再次被选择的可能性过大,
过大虽然可以提高算法的随机搜索能力和全局搜索能力,但太多无用搜索会降低算法的收敛速度。

蚂蚁数目m

信息素强度Q:总信息量Q对算法的影响有赖于

的选取,以及算法模型的选取。相关研究表明:总信息量Q对ant-cycle模型蚁群算法的性能没有明显影响,可以任意选取。

例1:旅行商问题(TSP问题)。假设有一个旅行商人要拜访全国31个省会城市,他需要选择所有需要走的路径,路径的限制是每一个城市只能拜访一次,而且要回到原来出发的城市,对路径的要求是为所有路径中的最小值。

全国31个省会城市的坐标为

[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];

解:

clear all;
close all;
clc;
m=20;                                            %蚂蚁数量
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);                                     %问题的规模,即城市数目
D=zeros(n,n);                                    %任何两个城市距离间隔矩阵
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);                                %信息素矩阵
Tabu=zeros(m,n);                              %信息素矩阵
NC=1;                                         %迭代计数器
R_Best=zeros(G,n);                            %各代最佳路线
L_Best=inf.*ones(G,1);                        %各代最佳路线长度,inf正无穷
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 isempty(find(visited==k,1))
                    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('适应度进化曲线')

注:

(1) eps表示最小浮点精度,

也就是说

(2)ceil向上取整,floor向下取整,round四舍五入,fix朝0取整

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第8张图片

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第9张图片

例2:求函数

的最小值,其中x的取值范围是[-5,5],y的取值范围是[-5,5]。这是一个有多个局部极值的函数。

解:函数图形如图所示

clear all;
close all;
clc;
x=-5:0.01:5;
y=-5:0.01:5;
N=size(x,2);
for i=1:N
    for j=1:N
        z(i,j)=20*(x(i)^2-y(j)^2)^2-(1-y(j))^2-3*(1+y(j))^2+0.3;
    end
end
mesh(x,y,z)
xlabel('x')
ylabel('y')

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第10张图片
clear all;
close all;
clc;
m=20;                                        %蚂蚁个数
G=200;                                       %最大迭代次数
Rho=0.9;                                     %信息素蒸发系数
P0=0.1;                                      %转移概率常数
XMAX=5;                                      %搜索变量x最大值
XMIN=-5;                                     %搜索变量x最小值
YMAX=5;                                      %搜索变量y最大值
YMIN=-5;                                     %搜索变量y最小值
%随机设置蚂蚁初始位置
for i=1:m
    X(i,1)=(XMIN+(XMAX-XMIN)*rand);
    X(i,2)=(YMIN+(YMAX-YMIN)*rand);
    Tau(i)=func(X(i,1),X(i,2));
end
step=0.1;%局部搜索步长
for NC=1:G
    lamda=1/NC;
    [Tau_Best,BestIndex]=min(Tau);
    %计算状态转移概率
    for i=1:m
        P(NC,i)=(Tau(BestIndex)-Tau(i))/(Tau(BestIndex));
    end
    %位置更新
    for i=1:m
        %局部搜索
        if  P(NC,i)XMAX
            temp1=XMAX;
        end
        if temp2YMAX
            temp2=YMAX;
        end
        %判断蚂蚁是否移动
        if func(temp1,temp2)

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第11张图片

蚁群算法matlab 函数_蚁群算法及MATLAB实例仿真_第12张图片

希望我明天继续爱学习!!!!!

你可能感兴趣的:(蚁群算法matlab,函数,路径规划算法,matlab仿真)