- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.
.
人工蚂蚁算法
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [x,y, minvalue] = AA(func)
% Example [x, y,minvalue] = AA('Foxhole')
clc;
tic;
subplot(2,2,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot 1
draw(func);
title([func, ' Function']);
%初始化各参数
Ant=100;%蚂蚁规模
ECHO=200;%迭代次数
step=0.01*rand(1);%局部搜索时的步长
temp=[0,0];
%各子区间长度
start1=-100;
end1=100;
start2=-100;
end2=100;
Len1=(end1-start1)/Ant;
Len2=(end2-start2)/Ant;
%P = 0.2;
%初始化蚂蚁位置
for i=1:Ant
X(i,1)=(start1+(end1-start1)*rand(1));
X(i,2)=(start2+(end2-start2)*rand(1));
%func=AA_Foxhole_Func(X(i,1),X(i,2));
val=feval(func,[X(i,1),X(i,2)]);
T0(i)=exp(-val);%初始信息素,随函数值大,信息素浓度小,反之亦然 %%%%%*********************************************************************
end;
%至此初始化完成
for Echo=1:ECHO %开始寻优
%P0函数定义,P0为全局转移选择因子
a1=0.9;
b1=(1/ECHO)*2*log(1/2);
f1=a1*exp(b1*Echo);
a2=0.225;
b2=(1/ECHO)*2*log(2);
f2=a2*exp(b2*Echo);
if Echo<=(ECHO/2)
P0=f1;
else
P0=f2;
end;
%P函数定义,P为信息素蒸发系数
a3=0.1;
b3=(1/ECHO).*log(9);
P=a3*exp(b3*Echo);
lamda=0.10+(0.14-0.1)*rand(1);%全局转移步长参数
Wmax=1.0+(1.4-1.0)*rand(1);%步长更新参数上限
Wmin=0.2+(0.8-0.2)*rand(1);%步长更新参数下限
%寻找初始最优值
T_Best=T0(1);
for j=1:Ant
if T0(j)>=T_Best
T_Best=T0(j);
BestIndex=j;
end;
end;
W=Wmax-(Wmax-Wmin)*(Echo/ECHO); %局部搜索步长更新参数
for j_g=1:Ant %全局转移概率求取,当该蚂蚁随在位置不是bestindex时
if j_g~=BestIndex
r=T0(BestIndex)-T0(j_g);
Prob(j_g)=exp(r)/exp(T0(BestIndex));
else %当j_g=BestIndex的时候进行局部搜索
if rand(1)<0.5
temp(1,1)=X(BestIndex,1)+W*step;
temp(1,2)=X(BestIndex,2)+W*step;
else
temp(1,1)=X(BestIndex,1)-W*step;
temp(1,2)=X(BestIndex,2)-W*step;
end;
Prob(j_g)=0;%bestindex的蚂蚁不进行全局转移
end;
X1_T=temp(1,1);
X2_T=temp(1,2);
X1_B=X(BestIndex,1)
文档评论(0)