蚁群算法人工智能试验报告.docx
《蚁群算法人工智能试验报告.docx》由会员分享,可在线阅读,更多相关《蚁群算法人工智能试验报告.docx(12页珍藏版)》请在冰豆网上搜索。
蚁群算法人工智能试验报告
人工智能实验报告
姓名:
学号:
班级:
实验时间:
蚁群算法
实验原理:
蚂蚁在觅食过程中可以找出巢穴到食物源的最短路径,为什么
(1)信息素(pheromone)
(2)正反馈现象:
某一路径上走过的蚂蚁越多,则后来者选择该路径的概率就越大。
(3)挥发现象:
路径上的信息素浓度会随着时间推进而逐渐衰减。
蚁群算法的缺点:
1)收敛速度慢
2)易于陷入局部最优
改进:
1)采用局部优化,设计了三种优化算子。
2)采用蚁群优化算法。
3)其它优化算法
实验内容:
旅行商问题(TSP,travelingsalesmanproblem):
—商人去n个城市销货,所有城市走一遍再回到起点,使
所走路程最短。
实验步骤:
算法代码:
%%蚁群算法的优化计算一一旅行商问题(TSP)优化
%%清空环境变量
clearall
clc
%%导入数据
load
%%计算城市间相互距离
n=size(citys,1);
D=zeros(ntn);
fori=l:
n
forj=1:
n
ifi=J
D(i.j)=sqrt(sum((citys(i,:
)一citys(j,:
))/2));else
D(i,j)=le-4;
end
end
end
%%初始化参数
%蚂蚁数量
%信息素重要程度因子
%启发函数重要程度因子
%信息素挥发因子
%常系数
%启发函数
%信息素矩阵
%路径记录表
%迭代次数初值
%最大迭代次数
%各代最佳路径
%各代最佳路径的长度
%各代路径的平均长度
m=50;
alpha=1:
•
beta=5;
rho=;
Q=1;
Eta=1./D;
Tau=ones(ntn);
Table=zeros(m,n);
iter=1;
iter_max=200;
Routebest=zeros(itermaxtn):
Lengthbest=zeros(iter_max,1);Lengthave=zeros(itermax,1);
%%迭代寻找最佳路径
whileiter<=iter_max
%随机产生各个剧蚁的起点城市
start=zeros(m,1);
fori=l:
m
temp=randperm(n):
%返回n个[0,n]间的随机元素向量
start(i)=temp(l);
end
Table(:
1)=start;
%构建解空间
citys_index=1:
n;%访问l'n这n个城市
%逐不蚂蚁路径选择
fori=l:
m
%逐个城市路径选择
forj=2:
n%各个蚂蚁都需要访问n-1个城市
tabu=Table(i,1:
(j-1));%已访问的城市集合(禁
忌表)
allow_index=^ismember(citys_index,tabu):
%判断
citys_index中元素有没有在tabu中出现,出现用1表示,否则用0表示。
allow=citys_index(allowindex):
%待访问的城市集合
P=allow;
%计算城市间转移概率
fork=1:
length(allow)
P(k)=Tau(tabu(end),allow(k))alpha*
Eta(tabu(end),allow(k)厂beta;
end
P=P/sum(P):
%轮盘赌法选择下一个访问城市
Pc=cumsum(P):
%返回矩阵不同维数的累加
targetindex=find(Pc>=rand);%选择下一个访问城市,往往转移概率大的城市被选中的概率也更大。
target=allow(target_index
(1)):
Table(i,j)=target;%已选定的下一个待访问城市end
end
%计算各个蚂蚁的路径距离
Length=zeros(m,1):
fori=l:
m
Route=Table(i.:
);
forj=1:
(n-1)
Length(i)=Length(i)+D(Route(j),Route(j+1));
end
Length(i)=Length(i)+D(Route(n),Route
(1)):
%构成环
end
%计算最短路径距离及平均距离
ifiter==1
[minLength,minindex]=min(Length):
Lengthbest(iter)=minLength;
Lengthave(iter)=mean(Length):
Routebest(iter,:
)=Table(minindex,:
):
%Table,访问城市
列表,也就是路径记录表
else
IminLength,minindex]=min(Length):
Lengthbest(iter)=min(Lengthbest(iter-1),min_Length):
Lengthave(iter)=mean(Length);
ifLengthbest(iter)==minLength
Route^best(iter,:
)=Table(minindex,:
):
else
Route_best(iter,:
)=Route_best((iter-1),:
);
■
end
end
%更新信息素
Delta_Tau=zeros(n,n);
%逐不蚂蚁计算
fori=l:
m
%逐个城市计算
forj=1:
(n-1)
DeltaTau(Table(i,j),Table(i,j+1))=
DeltaTau(Table(i,j).Table(i,j+1))+Q/Length(i):
end
Delta_Tau(Table(i,n)tTable(i,1))二
DeltaTau(Table(i,n).Table(i,1))+Q/Length(i):
end
Tau=(1-rho)*Tau+DeltaTau;%所有蚂蚁在各连接路径上的信息素浓度,不同迭代层间有关联
%迭代次数加1,清空路径记录表
iter=iter+1;
Table=zeros(m,n);
end
%%结果显示
[ShortestLength,index]=min(Lengthbest):
Shortest_Route=Routebest(index,:
):
disp([‘最短距离:
'num2str(Shortest_Length)]);
disp([‘最短路径:
'num2str([Shortest,RouteShortest_Route
(1)])]);
%%绘图
figure(l)
plot([citys(Shortest,Route,1):
citys(Shortest,Route
(1),1)],・・・
[citys(Shortest,Route,2);citys(Shortest,Route
(1),2)],‘0-’);gridonfori=1:
size(cityst1)
end
text(citys(Shortest^Route
(1),1),citys(ShortestRoute
(1)T2)/起
点J;""
text(citys(Shortest_Route(end),1),citys(ShortestRoute(end)12)/
终点');
xlabel?
城市位置横坐标')
ylabelC城市位置纵坐标')
titledF蚁群算法优化路径(最短距离:
’num2str(Shortest_Length)r)1])figure
(2)
plot(1:
iter_max,Lengthybest/b1,1:
itermax,Lengthave,1r:
r)
legend(-最短距离’,’平码距离’)
xlabelC迭代次数')
ylabelC距离J
titleC各代最短距离与平均距离对比')
实验结果:
FileEditViev/InsertToolsDesktopWindov/HelpD&皱&紳⑥®|□S.BQ
1500200025003000350040004500
城市位置横坐标
回
40
5
FileEdit\/iewInsertToolsDesktopWindowHelp
□se愴®Q曹®舉□目■口
」00
0010
5
1500200025003000350040004500
城市位羞横坐标
蚁群算法优化路径(販短距离:
156019195)