遗传算法及蚂蚁算法作业.docx

上传人:b****2 文档编号:1581467 上传时间: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

遗传算法及蚂蚁算法作业

(1)用遗传算法来做:

第一步:

确定决策变量及其约束条件

s.t.-5<=x<=5

第二步:

建立优化模型

第三步:

确定编码方法,用长度为50位的二进制编码串来表示决策变量x

第四步:

确定解码方法

第五步:

确定个体评价方法

个体的适应度取为每次迭代的最小值的绝对值加上目标函数值,即

第六步:

确定参数

本题种群规模n=30,迭代次数ger=200,交叉概率pc=0.65,变异概率pm=0.05

代码:

clearall;

closeall;

clc;

tic;

n=30;

ger=200;

pc=0.65;

pm=0.05;

%生成初始种群

v=init_population(n,50);

[N,L]=size(v);

disp(sprintf('Numberofgenerations:

%d',ger));

disp(sprintf('Populationsize:

%d',N));

disp(sprintf('Crossoverprobability:

%.3f',pc));

disp(sprintf('Mutationprobability:

%.3f',pm));

%待优化问题

xmin=-5;

xmax=5;

ymin=-5;

ymax=5;

f='-(2-exp(-(x.^2+y.^2)))';

[x,y]=meshgrid(xmin:

0.1:

xmax,ymin:

0.1:

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(:

1:

25),xmin,xmax);

y=decode(v(:

26:

50),ymin,ymax);

fit=eval(f);

[sol,indb]=max(fit);%每次迭代中最优目标函数值

v(1,:

)=v(indb,:

);

fit_mean=mean(fit);%每次迭代中目标函数值的平均值

vx=[vxsol];

vmfit=[vmfitfit_mean];

it=it+1;

end

%%%%最后结果

disp(sprintf('\n'));%空一行

%显示最优解及最优值

disp(sprintf('Maximumfound[x,f(x)]:

[%.4f,%.4f,%.4f]',x(indb),y(indb),-sol));

%图形显示最优结果

figure

(2);

mesh(vxp,vyp,-vzp);

holdon;

gridon;

plot3(x,y,-fit,'r*');

title('染色体的最终位置');

xlabel('x');

ylabel('y');

zlabel('f(x,y)');

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

figure(3);

plot(-vx);

%title('最优,平均函数值变化趋势');

xlabel('Generations');

ylabel('f(x)');

holdon;

plot(-vmfit,'r');

holdoff;

runtime=toc

运行结果:

Maximumfound[x,f(x)]:

[0.0033,0.0017,1.0000]

(2)用蚁群算法来做

代码:

%Antmainprogram

clearall;

closeall;

clc;

tic;

Ant=100;

Ger=50;

xmin=-5;

xmax=5;

ymin=-5;

ymax=5;

tcl=0.05;

f='-(2-exp(-(x.^2+y.^2)))';%待优化的目标函数

[x,y]=meshgrid(xmin:

tcl:

xmax,ymin:

tcl:

ymax);

vxp=x;

vyp=y;

vzp=eval(f);

figure

(1);

mesh(vxp,vyp,-vzp);

holdon;

%初始化蚂蚁位置

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;

end

plot3(X(:

1),X(:

2),-T0,'k*');

holdon;

gridon;

title('蚂蚁的初始分布位置');

xlabel('x');

ylabel('y');

zlabel('f(x,y)');

%开始寻优

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:

Ant

ifProb(i_ger,j_g_tr)

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);

end

iftemp1

temp1=xmin;

end

iftemp1>xmax

temp1=xmax;

end

iftemp2

temp2=ymin;

end

iftemp2>ymax

temp2=ymax;

end

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;

end

end

%信息素更新

fort_t=1:

Ant

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

end

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

else

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

end

else

max_global(i_ger)=max_local(i_ger);

end

end

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

figure

(2);

mesh(vxp,vyp,-vzp);

holdon;

x=X(:

1);

y=X(:

2);

plot3(x,y,-eval(f),'b*');

holdon;

gridon;

title('蚂蚁的最终分布位置');

xlabel('x');

ylabel('y');

zlabel('f(x,y)');

figure(3);

plot(1:

Ger,-max_global,'b-')

holdon;

title('最优函数值变化趋势');

xlabel('iteration');

ylabel('f(x)');

gridon;

[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)))

runtime=toc

结果:

maxvalue=1.0000

题目2:

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

解:

第一步:

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

第二步:

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

第三步:

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

第四步:

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

第五步:

转第三步

第六步:

输出结果

代码:

functionshortroad_ant_main

%Antmainprogram

clearall;closeall;clc;%清屏

tic;%计时开始

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;v(:

PN)=1;%始点和终点纳入路径

%把距离当信息素浓度

fit=short_road_fun(v,power);

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

T0=max(fit)-fit;

%画出图形

figure

(1);gridon;holdon;

plot(fit,'k*');

title('(a)蚂蚁的初始位置');

xlabel('x');ylabel('f(x)');

%初始化

vmfit=[];vx=[];

P0=0.2;%P0----全局转移选择因子

P=0.8;%P----信息素蒸发系数

%C=[];

%开始寻优

fori_ger=1:

Ger

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:

Ant

ifProb(i_ger,j_g_tr)

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

M=rand(1,PN)

temp=v(j_g_tr,:

)-2.*(v(j_g_tr,:

).*M)+M;

else

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

M=rand(1,PN)

temp=v(j_g_tr,:

)-2.*(v(j_g_tr,:

).*M)+M;

end

%始点和终点重新加入。

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

temp(:

1)=1;temp(:

end)=1;

ifshort_road_fun(temp,power)

),power)

%记录

v(j_g_tr,:

)=temp;

end

end

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

fit=short_road_fun(v,power);

T0=(1-P)*T0+(max(fit)-fit);%信息素蒸发

[sol,indb]=min(fit);

v(1,:

)=v(indb,:

);%记录本次迭代的状态

media=mean(fit);

vx=[vxsol];

vmfit=[vmfitmedia];

end

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

%%%%最后结果

disp(sprintf('\n'));%空一行

%显示最优解及最优值

disp(sprintf('Shortroadis%s',num2str(find(v(indb,:

)))));%num2str数据转换成字符。

disp(sprintf('Mininumis%d',sol));

v(indb,:

%图形显示最优结果

figure

(2);gridon;holdon;

plot(fit,'r*');

title('蚂蚁的最终位置');

xlabel('x');

ylabel('f(x)');

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

figure(3);

plot(vx);

title('最优,平均函数值变化趋势');

xlabel('Generations');ylabel('f(x)');

holdon;plot(vmfit,'r');holdoff;

runtime=toc%时间结束

end

%%

functionfit=short_road_fun(v,power)

[vmvn]=size(v);

fit=zeros(vm,1);%记录每一条路径的距离

fori=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));%求路径的距离

end

end

end

%%

%Functioninit_population

functionv=init_population(n1,s1)

v=round(rand(n1,s1));%初始化所有的蚂蚁

end

运行结果:

Shortroadis1258121516

Mininumis18

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

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

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

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