遗传算法Word格式.docx

上传人:b****8 文档编号:22908150 上传时间:2023-02-05 格式:DOCX 页数:17 大小:153.78KB
下载 相关 举报
遗传算法Word格式.docx_第1页
第1页 / 共17页
遗传算法Word格式.docx_第2页
第2页 / 共17页
遗传算法Word格式.docx_第3页
第3页 / 共17页
遗传算法Word格式.docx_第4页
第4页 / 共17页
遗传算法Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

遗传算法Word格式.docx

《遗传算法Word格式.docx》由会员分享,可在线阅读,更多相关《遗传算法Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

遗传算法Word格式.docx

用MATLAB基本命令语句进行基本遗传算法编写,我的程序流程图为:

此时整个程序是基本的遗传算法,只包含三个基本算子,没有改进,其中初始化为随机生成矩阵(rand命令),编码采用简单实用的10位二进制编码,需要说明的是,框图中遗传算子包含了遗传算法的三个算子,每一代通过选择后交叉,再变异生成下一代。

选择采用的是轮盘赌,交叉采用的是单点交叉,变异采用基本位变异(取反),编码中每一位都有概率变异。

详细见附录代码1。

3.2改进的遗传算法

多次调整程序参数(种群大小、代数、码长、交叉概率、变异概率)并多次运行代码1(即基本的遗传算法),程序的运行结果变异太大,有高有低,通过改变参数值虽然运行结果能够在一定范围内去接近Schaffer函数的最小值点,但离目标值还总是差得很大一段距离。

而且不管取什么参数值,从输出的图形的中可以很明显的看出,xi的取值随着代数增加跳跃在目标值的一定范围内,既没有很好的逼近目标值,也没有趋向一个稳定的值,见图3.1。

Result:

k=200MIN=1.4160xb1=1.6618xb2=0.8798

图3.1

算法的稳定性和收敛性似乎不强,程序运行结果的准确性也不高,需要改进。

优秀个体保护法对于每代中一定数量的最优个体,使之直接进入下一代,防止优秀个体由于复制、交叉或变异中的偶然因素而被破坏掉,能够增强算法的稳定性和收敛性。

在代码1.中添加了优秀个体保护法后,程序运行结果的稳定性收敛性准确性明显地提高了很多很多,效果立竿见影,xi也能很好的逼近目标值并且很好地收敛并呈阶梯状稳定,见图3.2。

改进代码为附录代码2,改进的地方有标识。

改进前和改进后的参数是一样的:

参数

M=200;

%种群大小

T=200;

%遗传运算得终止进化代数

CL=10;

%二进制编码长度10位

F=0.7;

%交叉概率

Bi=0.5;

%变异概率

Max=100;

%输入值的取值上限

Min=-100;

%输入值的取值下限

k=200MIN=0.5995xb1=-0.0978xb2=0.0978

图3.2

由于改进前和改进后程序运行差异明显,改进后明显优于改进前,且改进后的算法程序能非常好地逼近目标值,故没有做一些性能指标(如多次运行结果的峰峰值,均值,方差)来描述和对比二者的性能。

四、用MATLAB遗传算法工具箱进行函数测试

可以直接运用MATLAB遗传算法工具箱GeneticAlgorithmToolbox寻求Schaffer函数在其定义域内的全局极小值

运用MATLAB遗传算法工具箱有两种方法,一种方法是用命令行函数ga,另一种方法是用图形用户界面gatool,但他们对应的输入输出变量是一样的,对应的遗传算法源代码是一样的。

使用GeneticAlgorithmToolbox,主要有以下几个步骤:

vWriteanM-filethatcomputesthefunctionyouwanttooptimize.

vNumberofvariables

vGeneticAlgorithmOptions(gaoptimset)

vRun

方法一:

寻求Schaffer函数的最小值,用ga函数具体实现如下:

Step1首先要写目标函数的M文件schaffer.m,文件代码见附录

fitnessFunction=@schaffer;

Step2变量为2,

nvars=2;

Step3SetGeneticAlgorithmOptions:

options=gaoptimset(options,'

PopInitRange'

[-1;

1]);

PopulationSize'

1000);

CrossoverFraction'

0.33);

Generations'

200);

SelectionFcn'

{@selectiontournament4});

CrossoverFcn'

@crossoversinglepoint);

MutationFcn'

{@mutationgaussian11});

Display'

'

off'

);

PlotFcns'

{@gaplotbestf});

Step4run

[X,FVAL,REASON,OUTPUT,POPULATION,SCORES]=ga(fitnessFunction,nvars,options);

方法二:

若用gatool图形界面,在相应的设置项填入或选择设置,然后运行即可。

以上的设置运行结果如下(多次试验得出的设置,多次运行得出的比较好的结果):

图形为:

Statusandresults:

GArunning.

GAterminated.

Fitnessfunctionvalue:

0.006667532430880696

Optimizationterminated:

stallgenerationslimitexceeded.

4、作业总结

1、我把options中的PopInitRange设置为[-1;

1],使得初代个体就能在最优值(0,0)附近,倘若我们不知道函数的最优值点在哪里,依照函数定义域把PopInitRange设置为[-100100],工具箱的运行结果不会在最优值点附近,而且会差很多很多。

所以,如果不知道目标点位置如何设置PopInitRange,如何评估最终结果的准确性。

2、MATLAB7.0自带的遗传算法工具箱GADS好像不适用于求有约束条件的极值问题

3、由于期末在即,时间有限,所以没有对某个参数值对算法性能的影响进行讨论。

 

参考文献

1、李玉榕.人工智能第三章求解优化问题的智能算法.福州大学.2010

2、刘会灯、朱飞.MATLAB编程基础与典型应用.人民邮电出版社.2008

附录

%-------------------------------------------代码1:

clearall;

closeall;

%遗传算法参数设定和初始化

G=round(rand(M,CL*2));

%初始化

NG=zeros(M,CL*2);

fork=1:

1:

T

T(k)=k;

fors=1:

M

N=G(s,:

y1=0;

y2=0;

N1=N(1:

CL);

%对x1进行解码,

fori=1:

CL

y1=y1+N1(i)*2^(i-1);

end

x1=(Max-Min)*y1/(2^CL-1)+Min;

N2=N(CL+1:

2*CL);

%对x2进行解码

CL

y2=y2+N2(i)*2^(i-1);

x2=(Max-Min)*y2/(2^CL-1)+Min;

F(s)=-((x1^2+x2^2)^0.25)*((sin(50*(x1^2+x2^2)^0.1))^2+1);

%目标函数表达式

Fit=F;

[Order,Index]=sort(Fit);

%将适应度从小到大进行排列

BF=Order(M);

%选出适应度最大得值

N=G(Index(M),:

y1=0;

xb1=(Max-Min)*y1/(2^CL-1)+Min;

x1_G(k)=xb1;

%为了便于最后图形输出,而引进的类似指针型变量

xb2=(Max-Min)*y2/(2^CL-1)+Min;

x2_G(k)=xb2;

BFI(k)=BF;

BG=G(Index(M),:

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

%selection

ada_sum=0;

M%直到累加和>

=fit_n,最后的累加就是复制个体

ada_sum=ada_sum+F(i);

(M-10)%最后10个体留给历代最优解

r=rand*ada_sum;

%随机产生一个数

ada_temp=0;

%初始化累加值为0

j=1;

while(ada_temp<

r)&

(j<

81)

ada_temp=ada_temp+F(j);

j=j+1;

end

ifj==1

else

j=j-1;

NG(i,:

)=G(j,:

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

%crossover

2:

Rn=rand;

%Rn为0-1之间的随机数

ifF>

Rn%交叉条件,F=0.6,Rn<

0.6时就进行交叉运算

Cn=ceil(2*CL*Rn);

ifor(Cn==0,Cn>

=20)

continue;

forj=Cn:

2*CL%随机交换部分染色体的基因,交换的位从Cn到末位止

temp=NG(i,j);

NG(i,j)=NG(i+1,j);

NG(i+1,j)=temp;

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

%mutation

M%变异运算

forj=1:

2*CL

Mr=rand;

%产生基本位变异位,同样Mr是0-1之间的数

ifBi>

Mr%变异条件

ifNG(i,j)==0

NG(i,j)=1;

NG(i,j)=0;

G=NG;

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

%result

k

MIN=-BF

xb1

xb2

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

%plot

subplot(3,1,3);

plot(T,-BFI,'

.'

xlabel('

次数'

ylabel('

最小值'

subplot(3,1,2);

plot(T,x2_G,'

.black'

X2'

subplot(3,1,1);

plot(T,x1_G,'

X1'

%---------------------------------------代码2:

%选出适应度最大得值

In=M;

%保护10个最优个体

10

BGG(i,:

)=G(Index(In),:

In=In-1;

%采用赌盘选择法

(M-10)

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

(M-10)%变异运算

Rs=10;

%(即后10位)进行保优

10

NG(M-Rs,:

)=BGG(i,:

Rs=Rs-1;

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

当前位置:首页 > 工程科技 > 交通运输

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

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