matlab 计算一元函数解,遗传算法简单一元函数优化实例

发布时间:2023-03-05 13:30

1.遗传算法简单一元函数优化实例

利用遗传算法计算最大值

f(x)=x sin(10*pi*x)+2, x in [-1,2]

选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25。

下面为一元函数优化问题的MATLAB代码

figure(1);

fplot(\'variable.*sin(10*pi*variable)+2.0\',[-1,2]); %画出函数曲线

%定义遗传算法参数

NIND=40; %个体数目(Number of individuals)

MAXGEN=25; %最大遗传代数(Maximum number of generations)

PRECI=20; %变量的二进制位数(Precision of variables)

GGAP=0.9; %代沟(Generation gap)

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

FieldD=[20;-1;2;1;0;1;1]; %区域描述器(Build field descriptor)

Chrom=crtbp(NIND, PRECI); %初始种群

gen=0; %代计数器

variable=bs2rv(Chrom, FieldD); %计算初始种群的十进制转换

ObjV=variable.*sin(10*pi*variable)+2.0; %计算目标函数值

while genFitnV=ranking(-ObjV); %分配适应度值(Assign fitness values)

SelCh=select(\'sus\', Chrom, FitnV, GGAP); %选择

SelCh=recombin(\'xovsp\', SelCh, 0.7); %重组

SelCh=mut(SelCh); %变异

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

ObjVSel=variable.*sin(10*pi*variable)+2.0; %计算子代的目标函数值

[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入子代的新种群

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*\');

figure(2);

plot(trace(1,:));

hold on;

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号