来喽!
一、群体智能
1.1 群体
群体智能这个概念来自对自然界中一些昆虫,如蚂蚁、蜜蜂等。单只蚂蚁的智能并不高。然而,几只蚂蚁凑在一起,就可以一起往蚁穴搬运路上遇到的食物。而如果是一群蚂蚁,它们就能够协同工作,建起坚固、漂亮的巢穴,还能一起抵御危险、抚养后代。这种群居性生物表现出来的智能行为被称为群体智能。群体智能是在集体层面表现出来的分布式、无中心、自组织系统。
图1 群体
图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)这种形式中的信息有着本地化的属性,即它只能被那些路过信息所在路径的昆虫发现。例如,很多蚂蚁物种,工蚁外出寻找食物并在路上释放信息素,其他工蚁感知信息素的存在并趋向于跟随信息素浓度大的路径。通过这种机制,蚂蚁能够显著高效地向巢穴运送食物。
在著名的双桥实验中,阿根廷蚂蚁地巢穴被两座等长的桥连接到食物源,蚂蚁可以通过任一座桥寻找到食物,并且每只蚂蚁都会在路过的桥上释放信息素。在这个前提下,蚂蚁开始探索周边到达食物源。起初,蚂蚁会随机选择一座桥,随着时间地变化,一座桥的信息素浓度更高,因此吸引更多蚂蚁,并最终使整个蚁群选择同一座桥。
在另一个双桥实验中,其中一个桥要远比另一个桥长,在这个实验中初始选择的随机波动影响要比之前小,而选择短桥的蚂蚁总是先回到巢穴(或食物源)。短桥上的信息素释放要比长桥早,因此蚂蚁会倾向于选择短桥。
图3 蚂蚁双桥实验 等距双桥(a) 非等距双桥(b)
二、蚁群算法理论
蚁群算法是对自然界蚂蚁的寻径方式进行模拟而得出的一种仿生算法。蚂蚁在运动过程中会留下信息素,蚂蚁在运动时又可以感知这种物质,来确定自己的运动方向。因此,大量蚂蚁组成的蚂蚁群体的集体行为表现出一种信息的正反馈现象。
2.1 真实蚁群觅食
若蚂蚁从A点出发,速度相同,食物在D点,则它可能随机选择路线ABD或者ACD。假设初始时每条路线只分配一只蚂蚁,每个时间单位行走一步。如图4,为8个时间单位时的情形。
图4 蚂蚁出发后8个时间单位
图5表示经过16个时间单位的情形。
图5 蚂蚁出发后16个时间单位
假设蚂蚁经过每一处留下一个单位的信息素,经过32个时间单位后,所有一开始出发的蚂蚁都在D点取得了食物。此时,ABD每一处信息素为4个单位,ACD每一处信息素为2个单位。
按照信息素的指引,蚁群在ABD路上增派一只蚂蚁,以此类推,ABD上的信息素越来越多,增派的蚂蚁也越来越多,最终按照信息素的指引,所有蚂蚁都会放弃ACD路线,这就是所谓的正反馈效应。
2.2 人工蚁群优化
TSP问题:每只蚂蚁的一步转移概率由每条边的参数决定:信息素值(信息素痕迹)、可见度(先验值)
信息素更新方式有两种:
挥发:所有路径上的信息素以一定比率减少。
增强:给评价‘好’的边增加信息素。
2.3 蚁群算法特点
(1)蚁群算法本质上是一种并行算法。每只蚂蚁搜索过程彼此独立。
(2)蚁群算法是一种自组织算法。简单说,就是系统从无序到有序的变化过程。
(3)蚁群算法具有较强鲁棒性。
(4)蚁群算法是正反馈算法。
三、蚁群算法及流程
在算法初始时刻,将m只蚂蚁随机的放到n座城市,同时将禁忌表tabu的第一个元素设置为当前所在城市。此时各路径上的信息素量相等,设
时刻,蚂蚁k从城市i转移到城市j的概率
式中,
当所有蚂蚁完成一次周游胡,各路径上的信息素根据式:
式中:
式中:
其中Q为正常数,
M.Dorigo提出了三种蚁群算法模型,上述模型为ant-cycle模型,另外两个模型分别为ant-quantity模型和ant-destiny模型,差别主要在于
ant-quantity模型中为:
ant-destiny模型中为:
蚁群算法实际是正反馈原理和启发式算法相结合的一种算法,不仅利用了信息素还用到了启发式因子,实验结果表明ant-cycle模型比ant-quantity模型和ant-destiny模型具有更好地性能。因为ant-cycle模型利用全局信息更新路径上的信息量,而ant-quantity模型和ant-destiny模型使用局部信息。
四、改进的蚁群算法
4.1 精英蚂蚁系统
该算法将一经发现的最好解称为
式中e是调整
其中
4.2 最大最小蚂蚁系统
为了克服基本蚁群中可能出现的停滞现象,Thomas Stutzle等人提出了最大—最小蚁群系统:
(1)每次循环后只有一只蚂蚁进行信息素更新。可以是大年循环中最优解(迭代最优蚂蚁),也可以是从实验开始依赖的最优解蚂蚁(全局最优蚂蚁)
(2)每个解的元素(TSP的每条边)上的信息素轨迹量的值域范围被限制在
4.3 基于排序的蚁群算法
该算法中,每个蚂蚁释放的信息素按照它们的不同等级进行挥发,类似于精英算法,精英蚂蚁在每次循环中释放更多信息素。在修改信息素路径前,按照它们的旅行长度进行排名,蚂蚁释放信息素的量与他们的排名相乘。每次循环,只有排名前w-1只蚂蚁和精英蚂蚁才允许释放信息素,信息素如下所示:
4.4 自适应蚁群算法
(1)每次循环结束后找出最优解,并保留。
(2)自适应改变
五、MATLAB实例仿真
参数说明:
信息素启发因子
期望启发因子
信息素蒸发系数
蚂蚁数目m
信息素强度Q:总信息量Q对算法的影响有赖于
例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取整
例2:求函数
解:函数图形如图所示
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')
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)
希望我明天继续爱学习!!!!!