遗传算法及蚂蚁算法作业文档格式.docx

上传人:b****2 文档编号:2952539 上传时间:2023-05-01 格式:DOCX 页数:14 大小:17.69KB
下载 相关 举报
遗传算法及蚂蚁算法作业文档格式.docx_第1页
第1页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第2页
第2页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第3页
第3页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第4页
第4页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第5页
第5页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第6页
第6页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第7页
第7页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第8页
第8页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第9页
第9页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第10页
第10页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第11页
第11页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第12页
第12页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第13页
第13页 / 共14页
遗传算法及蚂蚁算法作业文档格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

遗传算法及蚂蚁算法作业文档格式.docx

《遗传算法及蚂蚁算法作业文档格式.docx》由会员分享,可在线阅读,更多相关《遗传算法及蚂蚁算法作业文档格式.docx(14页珍藏版)》请在冰点文库上搜索。

遗传算法及蚂蚁算法作业文档格式.docx

Numberofgenerations:

%d'

ger));

Populationsize:

N));

Crossoverprobability:

%.3f'

pc));

Mutationprobability:

pm));

%待优化问题

xmin=-5;

xmax=5;

ymin=-5;

ymax=5;

f='

-(2-exp(-(x.^2+y.^2)))'

;

[x,y]=meshgrid(xmin:

0.1:

xmax,ymin:

ymax);

vxp=x;

vyp=y;

vzp=eval(f);

figure

(1);

mesh(vxp,vyp,-vzp);

holdon;

gridon;

%计算适应度,并画出初始种群图形

x=decode(v(:

1:

25),xmin,xmax);

y=decode(v(:

26:

50),ymin,ymax);

fit=eval(f);

plot3(x,y,-fit,'

k*'

);

title('

(a)染色体的初始位置'

xlabel('

x'

ylabel('

y'

zlabel('

f(x,y)'

%迭代前的初始化

vmfit=[];

vx=[];

it=1;

%迭代计数器

%开始进化

whileit<

=ger

%Reproduction(Bi-classistSelection)

vtemp=roulette(v,fit);

%Crossover

v=crossover(vtemp,pc);

%Mutation

M=rand(N,L)<

=pm;

%M(1,:

)=zeros(1,L);

v=v-2.*(v.*M)+M;

%Results

x=decode(v(:

y=decode(v(:

fit=eval(f);

[sol,indb]=max(fit);

%每次迭代中最优目标函数值

v(1,:

)=v(indb,:

fit_mean=mean(fit);

%每次迭代中目标函数值的平均值

vx=[vxsol];

vmfit=[vmfitfit_mean];

it=it+1;

end

%%%%最后结果

\n'

));

%空一行

%显示最优解及最优值

Maximumfound[x,f(x)]:

[%.4f,%.4f,%.4f]'

x(indb),y(indb),-sol));

%图形显示最优结果

figure

(2);

r*'

染色体的最终位置'

%图形显示最优及平均函数值变化趋势

figure(3);

plot(-vx);

%title('

最优,平均函数值变化趋势'

Generations'

f(x)'

plot(-vmfit,'

r'

holdoff;

runtime=toc

运行结果:

[0.0033,0.0017,1.0000]

(2)用蚁群算法来做

代码:

%Antmainprogram

Ant=100;

Ger=50;

tcl=0.05;

%待优化的目标函数

tcl:

%初始化蚂蚁位置

fori=1:

Ant

X(i,1)=(xmin+(xmax-xmin)*rand

(1));

X(i,2)=(ymin+(ymax-ymin)*rand

(1));

%T0----信息素,函数值越大,信息素浓度越大

T0(i)=exp(-(X(i,1).^2+X(i,2).^2))-2;

plot3(X(:

1),X(:

2),-T0,'

蚂蚁的初始分布位置'

%开始寻优

fori_ger=1:

Ger

P0=0.2;

%P0----全局转移选择因子

P=0.8;

%P----信息素蒸发系数

lamda=1/i_ger;

%转移步长参数

[T_Best(i_ger),BestIndex]=max(T0);

forj_g=1:

Ant%求取全局转移概率

r=T0(BestIndex)-T0(j_g);

Prob(i_ger,j_g)=r/T0(BestIndex);

end

forj_g_tr=1:

ifProb(i_ger,j_g_tr)<

P0

temp1=X(j_g_tr,1)+(2*rand

(1)-1)*lamda;

temp2=X(j_g_tr,2)+(2*rand

(1)-1)*lamda;

else

temp1=X(j_g_tr,1)+(xmax-xmin)*(rand

(1)-0.5);

temp2=X(j_g_tr,2)+(ymax-ymin)*(rand

(1)-0.5);

iftemp1<

xmin

temp1=xmin;

iftemp1>

xmax

temp1=xmax;

iftemp2<

ymin

temp2=ymin;

iftemp2>

ymax

temp2=ymax;

if-(2-exp(-(temp1.^2+temp2.^2)))>

-(2-exp(-(X(j_g_tr,1).^2+X(j_g_tr,2).^2)))

X(j_g_tr,1)=temp1;

X(j_g_tr,2)=temp2;

%信息素更新

fort_t=1:

T0(t_t)=(1-P)*T0(t_t)-(2-exp(-(X(t_t,1).^2+X(t_t,2).^2)));

[c_iter,i_iter]=max(T0);

maxpoint_iter=[X(i_iter,1),X(i_iter,2)];

max_local(i_ger)=-(2-exp(-(X(i_iter,1).^2+X(i_iter,2).^2)));

%将每代全局最优解存到max_global矩阵中

ifi_ger>

=2

ifmax_local(i_ger)>

max_global(i_ger-1)

max_global(i_ger)=max_local(i_ger);

max_global(i_ger)=max_global(i_ger-1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

x=X(:

1);

y=X(:

2);

plot3(x,y,-eval(f),'

b*'

蚂蚁的最终分布位置'

plot(1:

Ger,-max_global,'

b-'

最优函数值变化趋势'

iteration'

[c_max,i_max]=max(T0);

maxpoint=[X(i_max,1),X(i_max,2)]

maxvalue=-(2-exp(-(X(i_max,1).^2+X(i_max,2).^2)))

结果:

maxvalue=1.0000

题目2:

利用蚁群算法求下面加权有向图中从A到G的最短路:

解:

初始化N只蚂蚁,也就是N条道路

初始化运行参数,开始迭代

在迭代步数范围之内,计算转移概率,如果小于全局转移概率就进行小范围的搜索,否则就进行大范围的搜索

更新信息素,记录状态,准备进行下一次迭代

转第三步

输出结果

functionshortroad_ant_main

%清屏

%计时开始

Ant=50;

Ger=100;

%运行参数初始化

power=[053100100100100100100100100100100100100100;

1000100136100100100100100100100100100100;

1001000100876100100100100100100100100100;

100100100010010010068100100100100100100100;

100100100100010010035100100100100100100100;

100100100100100010010033100100100100100100;

100100100100100100010084100100100100100100;

100100100100100100100010010022100100100100;

100100100100100100100100010010012100100100;

100100100100100100100100100010033100100100;

100100100100100100100100100100010010035100;

100100100100100100100100100100100010052100;

100100100100100100100100100100100100066100;

10010010010010010010010010010010010010001004;

10010010010010010010010010010010010010010003;

1001001001001001001001001001001001001001001000];

[PMPN]=size(power);

v=init_population(Ant,PN);

v(:

1)=1;

PN)=1;

%始点和终点纳入路径

%把距离当信息素浓度

fit=short_road_fun(v,power);

%距离越小越好,所以要和信息素浓度相对应。

T0=max(fit)-fit;

%画出图形

plot(fit,'

(a)蚂蚁的初始位置'

%初始化

P0=0.2;

P=0.8;

%C=[];

%最大信息素浓度

%与最佳的蚂蚁的距离

%应该以多大的速率向它靠拢

end

%局部转移----小动作转移

M=rand(1,PN)<

lamda;

temp=v(j_g_tr,:

)-2.*(v(j_g_tr,:

).*M)+M;

%全局转移----大步伐转移

P0;

%始点和终点重新加入。

即不能在移动过程中发生改变。

temp(:

temp(:

end)=1;

ifshort_road_fun(temp,power)<

short_road_fun(v(j_g_tr,:

),power)

%记录

v(j_g_tr,:

)=temp;

%信息素更新,准备下一次迭代

fit=short_road_fun(v,power);

T0=(1-P)*T0+(max(fit)-fit);

%信息素蒸发

[sol,indb]=min(fit);

%记录本次迭代的状态

media=mean(fit);

vmfit=[vmfitmedia];

Shortroadis%s'

num2str(find(v(indb,:

)))));

%num2str数据转换成字符。

Mininumis%d'

sol));

v(indb,:

蚂蚁的最终位置'

plot(vx);

plot(vmfit,'

runtime=toc%时间结束

%%

functionfit=short_road_fun(v,power)

[vmvn]=size(v);

fit=zeros(vm,1);

%记录每一条路径的距离

vm

I=find(v(i,:

)==1);

%寻找在路径上的点

[Im,In]=size(I);

forj=1:

In-1

fit(i)=fit(i)+power(I(j),I(j+1));

%求路径的距离

%Functioninit_population

functionv=init_population(n1,s1)

v=round(rand(n1,s1));

%初始化所有的蚂蚁

Shortroadis1258121516

Mininumis18

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2