遗传算法求函数极大值matlab实现

  • 格式:doc
  • 大小:14.27 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遗传算法求函数最大值(matlab实现)

一、题目:

2,,当x在0~31区间的最大值。寻找f(x)=x

二、源程序:

%遗传算法求解函数最大值

%本程序用到了英国谢菲尔德大学(Sheffield)开发的工具箱GATBX,该工具箱比matlab自带的GATOOL使用更加灵活,但在编写程序方面稍微复杂一些

Close all;

Clear all;

figure(1);

fplot('variable*variable',[0,31]); %画出函数曲线

%以下定义遗传算法参数

GTSM=40; %定义个体数目

ZDYCDS=20; %定义最大遗传代数

EJZWS=5; %定义变量的二进制位数

DG=0.9; %定义代沟

最优结果的初始值% trace=zeros(2, ZDYCDS);

FieldD=[5;-1;2;1;0;1;1]; %定义区域描述器的各个参数%以下为遗传算法基本操作部分,包括创建初始种群、复制、交叉和变异

Chrom=crtbp(GTSM, EJZWS); %创建初始种群,即生成给定规模的二进制种群和结构

gen=0; %定义代数计数器初始值variable=bs2rv(Chrom, FieldD); %对生成的初始种群进行十进制转换

2 f(x)=x计算目标函数值% ObjV=variable*variable;

while gen

SelCh=select('sus', Chrom, FitnV, DG); %选择,即对个体按照他们的适配值进行复制

SelCh=recombin('xovsp', SelCh, 0.7); %交叉,即首先将复制产生的匹配池中的成员随机两两匹配,再进行交叉繁殖

SelCh=mut(SelCh); %变异,以一个很小的概率随机地改变一个个体串位的值

variable=bs2rv(SelCh, FieldD); %子代个体的十进制转换

ObjVSel=variable*variable; %计算子代的目标函数值

[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);

%再插入子代的新种群,其中Chrom为包含当前种群个体的矩阵,SelCh为包好当前种群后代的矩阵

variable=bs2rv(Chrom, FieldD); %十进制转换

gen=gen+1; %代数计数器增加

%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I 为种群的

%序号

[Y, I]=max(ObjV);hold on; %求出其最大目标函数值plot(variable(I), Y, 'bo');

trace(1, gen)=max(ObjV); %遗传算法性能跟踪

trace(2, gen)=sum(ObjV)/length(ObjV);

end

%以下为结果显示部分,通过上面计算出的数值进行绘图

variable=bs2rv(Chrom, FieldD); %最优个体进行十进制转换hold on, grid;

plot(variable,ObjV,'b*'); %将结果画出

三、运行结果:

时,该取得最大值由图可见该函数为单调递增函数,即当X=31 f(x)。

=961max