基于遗传算法的函数优化.docx

上传人:b****8 文档编号:9361339 上传时间:2023-02-04 格式:DOCX 页数:25 大小:130.27KB
下载 相关 举报
基于遗传算法的函数优化.docx_第1页
第1页 / 共25页
基于遗传算法的函数优化.docx_第2页
第2页 / 共25页
基于遗传算法的函数优化.docx_第3页
第3页 / 共25页
基于遗传算法的函数优化.docx_第4页
第4页 / 共25页
基于遗传算法的函数优化.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于遗传算法的函数优化.docx

《基于遗传算法的函数优化.docx》由会员分享,可在线阅读,更多相关《基于遗传算法的函数优化.docx(25页珍藏版)》请在冰豆网上搜索。

基于遗传算法的函数优化.docx

基于遗传算法的函数优化

智能多媒体实验报告

实验六:

基于遗传算法的函数优化

 

姓名:

班级:

学号:

同做者:

一、实验目的

利用遗传算法求解函数极值。

二、算法概要

1.遗传算法概要

遗传算法是具有“生成+检测”的迭代过程的搜索算法。

它的基本处理流程如图6.1所示。

由此流程图可见,遗传算法是一种群体型操作,该操作以群体中的所有个体为对象。

选择(selection)、交叉(crossover)和变异(mutation)是遗传算法的3个主要操作算子,它们构成了所谓的遗传操作(geneticoperation),使遗传算法具有了其它传统方法所没有的特性。

遗传算子包含如下6个基本因素:

(1)参数编码:

由于遗传算法不能直接处理解空间的解数据,因此必须通过编码将它们表示成遗传空间的基因型串结构数据。

(2)生成初始群体:

由于遗传算法的群体型操作需要,所以必须为遗传操作准备一个由若干初始解组成的初始群体。

初始群体的每个个体都是通过随机方法产生。

(3)适应度评估检测:

遗传算法在搜索进化过程中一般不需要其他外部信息,仅用适应度(fitness)值来评估个体或解的优劣,并作为以后遗传操作的依据。

(4)选择(selection):

选择或复制操作是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。

个体适应度越高,其被选择的机会就越多。

此处采用与适用度成比例的概率方法进行选择。

具体地说,就是首先计算群体中所有个体适应度的总和(

),再计算每个个体的适应度所占的比例(

),并以此作为相应的选择概率

(5)交叉操作:

交叉操作是遗传算法中最主要的遗传操作。

简单的交叉(即一点交叉)可分两步进行:

首先对种群中个体进行随机配对;其次,在配对个体中随机设定交叉处,配对个体彼此交换部分信息。

(6)变异:

变异操作是按位(bit)进行的,即把某一位的内容进行变异。

变异操作同样也是随机进行的。

一般而言,变异概率

都取得较小。

变异操作是十分微妙的遗传操作,它需要和交叉操作配合使用,目的是挖掘群体中个体的多样性,克服有可能限于局部解的弊病。

这6个要素构成了遗传算法的核心内容,其流程如图6.1所示。

图6.1遗传算法的基本流程

2.二进制编码及解码方法

二进制编码是遗传算法中最主要的一种编码方法,它使用的编码符号集是由二进制符号0和1所组成的二进制符号集{0,1},它所构成的个体基因型是一个二进制编码符号串。

二进制编码符号串的长度与问题所要求的求解精度有关。

假设某一参数的取值范围是[Umin,Umax],我们用长度为L的二进制编码符号串来表示该参数,则它总共能够产生

种不同的编码,若使参数编码时的对应关系如下:

00000000…00000000=0→Umin

00000000…00000001=1→Umin+δ

………

111111111…11111111=2L﹣1→Umax

则二进制编码的编码精度为:

(6-1)

假设某一个个体的编码是:

X

bLbL﹣1bL,则对应的解码公式为:

(6-2)

例如,对于

,若用十位长的二进制编码来表示该参数的话,则下述符号串:

X:

0010101111

就可表示一个个体,它所对应的参数值是

此时的编码精度为

其中:

f个体适应度

[Umin,Umax]某变量的取值范围

δ编码精度

三、算法步骤及流程图

Step1:

参数设置及种群初始化;

Step2:

适应度评价;

Step3:

轮盘赌选择;

Step4:

交叉;

Step5:

变异;

Step6:

适应度评价;

Step7:

终止条件判断,若未达到终止条件,则转到Step3;

Step8:

输出结果。

四、实验程序

主程序

clc;

clear;closeall;

v=2*rand(50,22)-1;

v=hardlim(v);

[N,L]=size(v);ger=200;pc=0.5;pm=0.01;updatef=0;c=0;

disp(sprintf('Numberofgenerations:

%d',ger));

disp(sprintf('Populationsize:

%d',N));

disp(sprintf('Crossoverprobability:

%.3f',pc));

disp(sprintf('Mutationprobability:

%.3f',pm));

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

%Generalparameters&Initialoperations

sol1=1;vmfit=[];it=1;vx=[];C=[];updatef=-10;

x=decod(v(:

1:

11),11);y=decod(v(:

12:

end),11);fit=eval(f);

%Generations

t0=clock;

whileit<=ger

%Selection轮盘赌

fori=1:

N

sp(i)=(fit(i)+3)/sum(fit+3);%

end

fori=2:

N

sp(i)=sp(i-1)+sp(i);

end

fori=1:

N

p=rand

(1);sindex=1;

whilep>sp(sindex)

sindex=sindex+1;%寻找要选择个体的位置

end

newv(i,:

)=v(sindex,:

);

end

fori=1:

N

v(i,:

)=newv(i,:

);%用选择出的个体构成的种群替代旧的种群

end

%Crossver

fori=1:

N

cindex(i)=i;

end

fori=1:

N%产生要配对的父代的序号;经过N次顺序调换,将原有顺序打乱,使相邻两个个体作为交叉的父代

point=unidrnd(N-i+1);

temp=cindex(i);

cindex(i)=cindex(i+point-1);

cindex(i+point-1)=temp;

end

fori=1:

2:

N

p=rand

(1);

if(p

point=unidrnd(L-1)+1;%1

forj=point:

(L-1)%交叉

ch=v(cindex(i),j);

v(cindex(i),j)=v(cindex(i+1),j);%cindex中相邻的两个为两个父代的序号

v(cindex(i+1),j)=ch;

end

end

end

%Mutation

M=rand(N,L)<=pm;%产生(N,L)维的01矩阵,为1的位置进行变异

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

%Evaluatefitness&Evolution

x=decod(v(:

1:

11),11);y=decod(v(:

12:

end),11);fit=eval(f);

[sol1,indb1]=max(fit);

ifupdatef>=sol1

sol1=updatef;

v(indb1,:

)=updatec;

end

updatef=sol1;

updatec=v(indb1,:

);

[sol2,indb2]=min(fit);

v(indb2,:

)=v(indb1,:

);

x=decod(v(:

1:

11),11);y=decod(v(:

12:

end),11);fit=eval(f);

media=mean(fit);

vx=[vxsol1];vmfit=[vmfitmedia];

ifrem(it,1)==0|it==10,

ifc~=1

disp(sprintf('Gen.:

%dx:

%2.5fy:

%2.5fAv:

%2.2ff(x,y):

%2.40f',it,x(indb1),y(indb1),media,sol1));

else

disp(sprintf('Gen.:

%dAv:

%2.2ff(x,y):

%2.5f',it,media,sol1));

end

end;

it=it+1;

end;

T=etime(clock,t0);%F=flops-f0;

X=x;Y=y;

x=x(indb1);y=y(indb1);fx=sol1;P=v;

disp(sprintf('thetotaltimeis%2.4f',T));

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

[%.2f]',fx));

%xx=vx;yy=vmfit;

figure

(2);plot(vx,'k');

title('f(x,y)xMean');xlabel('Generations');ylabel('f(x,y)');

holdon;plot(vmfit,'k:

');legend('best','mean',0);holdoff;

decod.m子程序

functioncode=decod(w_code,len)

w_size=size(w_code);

code=ones(w_size

(1),1);%N*1的矩阵

%编写解码表

code_arry=ones(1,len);

fori=0:

len-1

code_arry(i+1)=2.^i;

end

%针对每一个样本进行解码

fori=1:

w_size

(1)

w=w_code(i,:

);

m=w.*code_arry;

code(i)=sum(m);

end

 

%转换到给定区间

rate=2./(2.^len-1);

code=-1+rate.*code;

return;

程序流程图:

五、实验结果

Numberofgenerations:

200

Populationsize:

50

Crossoverprobability:

0.500

Mutationprobability:

0.010

Gen.:

1x:

0.05227y:

0.17440Av:

-0.55f(x,y):

-0.0331482272125327780000000000000000000000

Gen.:

2x:

0.04934y:

0.17440Av:

-0.53f(x,y):

-0.0328503900402103420000000000000000000000

Gen.:

3x:

-0.09331y:

-0.12066Av:

-0.48f(x,y):

.023*********

Gen.:

4x:

0.05227y:

0.10992Av:

-0.42f(x,y):

-0.0148140582009155010000000000000000000000

Gen.:

5x:

0.05227y:

0.10992Av:

-0.37f(x,y):

-0.0148140582009155010000000000000000000000

Gen.:

6x:

0.05227y:

0.10992Av:

-0.34f(x,y):

-0.0148140582009155010000000000000000000000

Gen.:

7x:

0.05227y:

0.07865Av:

-0.31f(x,y):

-0.0089184095590458482000000000000000000000

Gen.:

8x:

0.05227y:

0.01612Av:

-0.33f(x,y):

-0.0029922135148867180000000000000000000000

Gen.:

9x:

0.05227y:

0.01612Av:

-0.38f(x,y):

-0.0029922135148867180000000000000000000000

Gen.:

10x:

0.05227y:

0.01612Av:

-0.32f(x,y):

-0.0029922135148867180000000000000000000000

Gen.:

11x:

0.05227y:

0.01612Av:

-0.24f(x,y):

-0.0029922135148867180000000000000000000000

Gen.:

12x:

0.04836y:

0.01612Av:

-0.25f(x,y):

-0.0025989157104096623000000000000000000000

Gen.:

13x:

0.04836y:

0.01612Av:

-0.24f(x,y):

-0.0025989157104096623000000000000000000000

Gen.:

14x:

0.04836y:

0.01612Av:

-0.22f(x,y):

-0.0025989157104096623000000000000000000000

Gen.:

15x:

0.04836y:

0.01612Av:

-0.24f(x,y):

-0.0025989157104096623000000000000000000000

Gen.:

16x:

0.04836y:

0.00049Av:

-0.25f(x,y):

-0.0023392627909490826000000000000000000000

Gen.:

17x:

0.04836y:

0.00049Av:

-0.30f(x,y):

-0.0023392627909490826000000000000000000000

Gen.:

18x:

0.04836y:

0.00049Av:

-0.31f(x,y):

-0.0023392627909490826000000000000000000000

Gen.:

19x:

0.04836y:

0.00049Av:

-0.34f(x,y):

-0.0023392627909490826000000000000000000000

Gen.:

20x:

0.04836y:

0.00049Av:

-0.37f(x,y):

-0.0023392627909490826000000000000000000000

Gen.:

21x:

0.03273y:

0.03175Av:

-0.41f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

22x:

0.03273y:

0.03175Av:

-0.33f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

23x:

0.03273y:

0.03175Av:

-0.30f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

24x:

0.03273y:

0.03175Av:

-0.28f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

25x:

0.03273y:

0.03175Av:

-0.26f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

26x:

0.03273y:

0.03175Av:

-0.21f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

27x:

0.03273y:

0.03175Av:

-0.13f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

28x:

0.03273y:

0.03175Av:

-0.13f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

29x:

0.03273y:

0.03175Av:

-0.11f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

30x:

0.03273y:

0.03175Av:

-0.10f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

31x:

0.03273y:

0.03175Av:

-0.10f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

32x:

0.03273y:

0.03175Av:

-0.10f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

33x:

0.03273y:

0.03175Av:

-0.19f(x,y):

-0.0020796098714885034000000000000000000000

Gen.:

34x:

0.02101y:

0.03175Av:

-0.23f(x,y):

-0.0014495696992679788000000000000000000000

Gen.:

35x:

0.02101y:

0.03175Av:

-0.21f(x,y):

-0.0014495696992679788000000000000000000000

Gen.:

36x:

0.02101y:

0.03175Av:

-0.22f(x,y):

-0.0014495696992679788000000000000000000000

Gen.:

37x:

0.02101y:

0.03175Av:

-0.23f(x,y):

-0.0014495696992679788000000000000000000000

Gen.:

38x:

0.02101y:

0.03175Av:

-0.17f(x,y):

-0.0014495696992679788000000000000000000000

Gen.:

39x:

0.02003y:

0.03175Av:

-0.17f(x,y):

-0.0014094762337630387000000000000000000000

Gen.:

40x:

0.02003y:

0.03175Av:

-0.18f(x,y):

-0.0014094762337630387000000000000000000000

Gen.:

41x:

0.01710y:

0.00440Av:

-0.15f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

42x:

0.01710y:

0.00440Av:

-0.19f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

43x:

0.01710y:

0.00440Av:

-0.19f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

44x:

0.01710y:

0.00440Av:

-0.21f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

45x:

0.01710y:

0.00440Av:

-0.20f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

46x:

0.01710y:

0.00440Av:

-0.15f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

47x:

0.01710y:

0.00440Av:

-0.15f(x,y):

-0.0003116789639848482400000000000000000000

Gen.:

48x:

0.00537y:

0.00440Av:

-0.19f(x,y):

-0.0000482076192380845980000000000000000000

Gen.:

49x:

0.00537y:

0.00440Av:

-0.25f(x,y):

-0.0000482076192380845980000000000000000000

Gen.:

50x:

0.00537y:

0.00440Av:

-0.20f(x,y):

-0.0000482076192380845980000000000000000000

Gen.:

51x:

0.00537y:

0.00244Av:

-0.15f(x,y):

-0.0000348431307364366280000000000000000000

Gen.:

52x:

0.00537y:

0.00049Av:

-0.13f(x,y):

-0.0000291154928071597700000000000000000000

Gen.:

53x:

0.00537y:

0.00049Av:

-0.13f(x,y):

-0.0000291154928071597700000000000000000000

Gen.:

54x:

0.00147y:

0.00440Av:

-0.11f(x,y):

-0.0000214786422347901870000000000000000000

Gen.:

55x:

0.00147y:

0.00440Av:

-0.09f(x,y):

-0.0000214786422347901870000000000000000000

Gen.:

56x:

0.00147y:

0.00440Av:

-0.07f(x,y):

-0.0000214786422347901870000000000000000000

Gen.:

57x:

0.00147y:

0.00440Av:

-0.04f(x,y):

-0.0000214786422347901870000000000000000000

Gen.:

58x:

0.00049y:

0.00440Av:

-0.03f(x,y):

-0.0000195694295916979000000000000000000000

Gen.:

59x:

0.00049y:

0.00440Av:

-0.03f(x,y):

-0.0000195694295916979000000000000000000000

Gen.:

60x:

0.00049y:

0.0044

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

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1