gatbx遗传算法工具箱之gaSVMcgForClass详细例子.docx
- 文档编号:26301978
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:14
- 大小:29.77KB
gatbx遗传算法工具箱之gaSVMcgForClass详细例子.docx
《gatbx遗传算法工具箱之gaSVMcgForClass详细例子.docx》由会员分享,可在线阅读,更多相关《gatbx遗传算法工具箱之gaSVMcgForClass详细例子.docx(14页珍藏版)》请在冰豆网上搜索。
gatbx遗传算法工具箱之gaSVMcgForClass详细例子
遗传算法
1.遗传算法的简单原理
遗传算法(GeneticAlgorithm,GA)是一种基于自然群体遗传演化机制的高效探索算法,它摒弃了传统的搜索方式,模拟自然界生物进化过程,采用人工进化的方式对目标空间进行随机化搜索。
它将问题域中的可能解看作是群体的一个个体或染色体,并将每一个体编码成符号串形式,模拟达尔文的遗传选择和自然淘汰的生物进化过程,对群体反复进行基于遗传学的操作(遗传,交叉和变异),根据预定的目标适应度函数对每个个体进行评价,依据适者生存,优胜劣汰的进化规则,不断得到更优的群体,同时以全局并行搜索方式来搜索优化群体中的最优个体,求得满足要求的最优解。
我们先通过一个例子来了解遗传算法的原理:
假定我们要求函数f(x)二x2
的极大值,其中x为自然数,0空x乞31。
现在,我们将每一个数看成一个生命体,通过进化,我们看谁能最后生存下来,谁就是我们所寻找的数。
1•编码:
我们将每一个数作为一个生命体,那么必须给其赋予一定的基因,这个过程叫做编码。
我们可以把变量x编码成5位长的二进制无符号整数表示形式,比如x=13可表示为01101的形式,也就是说,数13的基因为01101。
2.初始群体的生成:
由于遗传的需要,我们必须设定一些初始的生物群体,让其作为生物繁殖的第一代,需要说明的是,初始群体的每个个体都是通过随机方法产生的,这样便可以保证生物的多样性和竞争的公平性。
3•适应度评估检测:
生物的进化服从适者生存,优胜劣汰的进化规则,因此,
我们必须规定什么样的基因是优”的,什么样的基因是劣”的,在这里,我们称为适应度。
显然,由于我们要求的最大值,因此,能使函数值较大的基因是优的,
使函数值较小的基因是劣的,因此,我们可以将原函数f(x)=x2定义为适应度函数,用来衡量某一生物体的适应程度。
4•选择:
接下来,我们便可以进行优胜劣汰的过程,这个过程在遗传算法里叫做选择。
注意,选择应该是一个随机的过程,基因差的生物体不一定会被淘汰,只是其被淘汰概率比较大罢了,这与自然界中的规律是相同的。
因此,我们可以采取赌轮的方式来进行选择。
5.交叉操作:
接下来进行交叉繁殖,随机选出两个生物体,让其交换一部分基因,这样便形成了两个新的生物体,为第二代。
6.变异:
生物界中不但存在着遗传,同时还存在着变异,在这里我们也引入变异,使生物体的基因中的某一位以一定的概率发生变化,这样引入适当的扰动,能避免局部极值的问题。
以上的算法便是最简单的遗传算法,通过以上步骤不断地进化,生物体的基因便逐渐地趋向最优,最后便能得到我们想要的结果。
2.遗传算法的步骤
从上面的例子中,我们便能得到遗传算法的一般步骤,如下图所示:
3.遗传算法的应用
遗传算法主要是用来寻优,它具有很多优点:
它能有效地避
免局部最优现象,有及其顽强的鲁棒性,并且在寻优过程中,基本不需要任何搜索空间的知识和其他辅助信息等等。
为了介绍遗传算法的应用,我们将前面的例子进行完,整个过程如下:
初始群体01101110000100010011
X的值
13
24
8
19
适应度f(x)
169
576
64
361
选择概率
0.14
0.49
0.06
0.31
选择上的计数(来自赌轮)
1
2
0
1
交叉处
0110|1
1100|0
11|000
10|011
下一代群体
01100
11001
11011
10000
X的值
12
25
27
16
适应度
144
625
729
256
求解过程:
将自变量在给定的范围内进行编码,得到种群编码,按照所选择的适应度函数并通过选择复制,交叉重组与变异对个体进行筛选与进化,使适应度值大的个体被保留,适应度小的个体被淘汰,新的群体继承了上一代的信息,同时又优于上一代,这样反复循环,直到满足条件,最后留下来的个体集中分布在最优解周围,筛选出其中的个体作为问题的解。
4.遗传算法的程序设计
(1)谢尔菲德遗传算法工具箱----英国谢尔菲德大学开发
1特点:
1)使用MATLA高级语言编写;
2)对问题使用M文件编写,可以看见源代码;
3)为用户提供了广泛多样的实用函数。
2安装:
1)解压谢尔菲德遗传算法工具箱,得到谢尔菲德遗传算法工具箱文件夹,内含DO文件夹与gatbx文件夹;
2)将谢尔菲德遗传算法工具箱文件夹拷贝到MATLAB'bin目录
下;
3)为谢尔菲德遗传算法工具箱文件设置工作路径:
双击MATLAB
运行MATLAB在MATLAB口中选择路径设置窗口:
Setpath;
4)在Setpath中选择Addfolder项;
5)设置如下:
…谢尔菲德遗传算法工具箱文件;
…谢尔菲德遗传算法工具箱文件\DOC
…谢尔菲德遗传算法工具箱文件\gatbx;
…谢尔菲德遗传算法工具箱文件\gatbx\test_fns。
点击SAVES存,再点击CLOS关闭Setpath窗口。
6)将文件夹的所有字母改为小写字母。
7)测试:
在CommandWindc窗口键入:
helpcrtbp。
3谢尔菲德遗传算法工具箱中主要函数
函数分类
函数
功能
创建种群
crtbase
创建基向量
crtbp
创建离散的随机种群
crtrp
创建实数随机种群
适应度计算
ranking
基于排序的适应度分配
scaling
比率适应度计算
选择函数
reins
一致随机和基于适应度的重插入
rws
轮盘选择
select
咼级选择例程
sus
随即便利采样
交叉算子
recdis
高级重组
recint
中间重组
recline
线性重组
recmut
具有变异特征的线性重组
recombin
咼级重组算子
xovdp
两点交叉算子
xovdprs
减少代理的两点交叉
xovmp
通常多点交叉
xovsh
洗牌交叉
xovshrs
减少代理的洗牌交叉
xovsp
单点交叉
xovsprs
减少代理的单点交叉
变异算子
mut
离散变异
mutate
高级变异函数
mutbga
实值变异
子种群的支持
migrate
在子种群间交换个体
实用函数
bs2rv
二进制串到实值的转换
rep
矩阵的复制
4常用函数
1创建离散的随机种群
[Chrom,Lind,BaseV]=crtbp(Nind,Lind)
[Chrom,Lind,BaseV]=crtbp(Nind,Base)
[Chrom,Lind,BaseV]=crtbp(Nind,Lind,Base)
(注意:
Base的列数就是Lind,即染色体的长度)
[Chrom,Lind,BaseV]=crtbp(5,10)
[Chrom,Lind,BaseV]=crtbp(5,[23456789])
2•适应度计算函数
FitnV=ranking(ObjV)
3.选择算子select
4.交叉算子recombin
5.变异算子mut
6.重插入函数reins
7.实用函数bs2rv
Phen=bs2rv(Chrom,FieldD),其中
FieldD=[len;lb;ub;code;scale;lbin;ubin]
8.实用函数rep
5谢尔菲德遗传算法工具箱应用举例
例1.用遗传算法求f(x)问估",X.[1,2]的最小值
X
遗传算法参数设置
种群规模
最大遗传代数
个体长度
代沟
交叉概率
变异概率
40
20
20
0.95
0.7
0.01
程序清单如下:
clc
clearall
closeall
%%画出函数图
figure
(1);
holdon;
lb=1;ub=2;%函数自变量范围[1,2]
ezplot('sin(10*pi*X)/X',[lb,ub]);%画出函数曲线
xlabel('自变量/X')
ylabel('函数值/Y')
%%定义遗传算法参数
NIND=40;%个体数目
MAXGEN=20;%最大遗传代数
PRECI=20;%变量的二进制位数
GGAP=0.95;%代沟
px=0.7;%交叉概率
pm=0.01;%变异概率
trace=zeros(2,MAXGEN);%寻优结果的初始值
FieldD=[PRECI;lb;ub;1;0;1;1];%区域描述器
Chrom=crtbp(NIND,PRECI);%产生初始种群
%%优化
gen=0;%代计数器
X=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换
ObjV=sin(10*pi*X)./X;%计算目标函数值
whilegen FitnV=ranking(ObjV);%分配适应度值 SelCh=select('sus',Chrom,FitnV,GGAP);%选择 SelCh=recombin('xovsp',SelCh,px);%重组 SelCh=mut(SelCh,pm);%变异 X=bs2rv(SelCh,FieldD);%子代个体的十进制转换 ObjVSel=sin(10*pi*X)./X;%计算子代的目标函数值 [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代到父代,得到新种群 X=bs2rv(Chrom,FieldD); gen=gen+1;%代计数器增加 %获取每代的最优解及其序号,Y为最优解,I为个体的序号 [Y,l]=min(ObjV); trace(1,gen)=X(l);%记下每代的最优值trace(2,gen)=Y;%记下每代的最优值 end plot(trace(1,: ),trace(2,: ),'bo');%画出每代的最优点 gridon; plot(X,ObjV,'b*');%画出最后一代的种群 holdoff %%画进化图 figure (2); plot(1: MAXGEN,trace(2,: )); gridon xlabel('遗传代数') ylabel('解的变化') title('进化过程') bestY=trace(2,end); bestX=trace(1,end); fprintf(['最优解: \nX=',num2str(bestX),'\nY=',num2str(bestY),'\n']) 例2.用遗传算法求f(x,y)二xcos(2二y)-ysin(2二x),x,y・[-2,2]的最大值。 遗传算法参数设置 种群规模 最大遗传代数 个体长度 代沟 交叉概率 变异概率 40 50 40(2个,每个长20) 0.95 0.7 0.01 程序清单如下: clc clearall closeall %%画出函数图 figure (1); lbx=-2;ubx=2;%函数自变量x范围[-2,2] lby=-2;uby=2;%函数自变量y范围[-2,2] ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);%画出函数曲线 holdon; %%定义遗传算法参数 NIND=40;%个体数目 MAXGEN=50;%最大遗传代数 PRECI=20;%变量的二进制位数 GGAP=0.95;%代沟 px=0.7;%交叉概率 pm=0.01;%变异概率 trace=zeros(3,MAXGEN);%寻优结果的初始值 FieldD=[PRECIPRECI;lbxlby;ubxuby;11;00;11;11];%区域描述器 Chrom=crtbp(NIND,PRECI*2);%初始种群 %%优化 gen=0;%代计数器 XY=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换 X=XY(: 1);Y=XY(: 2); ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);%计算目标函数值 whilegen FitnV=ranking(-ObjV);%分配适应度值 SelCh=select('sus',Chrom,FitnV,GGAP);%选择 SelCh=recombin('xovsp',SelCh,px);%重组 SelCh=mut(SelCh,pm);%变异 XY=bs2rv(SelCh,FieldD);%子代个体的十进制转换 X=XY(: 1);Y=XY(: 2); ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);%计算子代的目标函数值 [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代到父代,得到新种群 XY=bs2rv(Chrom,FieldD); gen=gen+1;%代计数器增加 %获取每代的最优解及其序号,Y为最优解,1为个体的序号 [Y,l]=max(ObjV); trace(1: 2,gen)=XY(l,: );%记下每代的最优值 trace(3,gen)=Y;%记下每代的最优值 end plot3(trace(1,: ),trace(2,: ),trace(3,: ),'bo');%画出每代的最优点 gridon; plot3(XY(: 1),XY(: 2),ObjV,'bo');%画出最后一代的种群 holdoff %%画进化图 figure (2); plot(1: MAXGEN,trace(3,: )); gridon xlabel('遗传代数') ylabel('解的变化') title('进化过程') bestZ=trace(3,end); bestX=trace(1,end); bestY=trace(2,end); fprintf(['最优解: \nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n']) ⑥作业: 用遗传算法求函数 f(x)--20exp(-02x^x2^exp(c°s^^cos2x2)202.71289 的最小值。 clcclearallcloseall%%画出函数图figure (1); Ibx仁-2;ubx仁2;%函数自变量x1范围[-2,2] Ibx2=-2;ubx2=2;%函数自变量x2范围[-2,2]ezmesh('-20*exp(-0.2*sqrt((x1A2+x2A2)/2))-exp((cos(2*pi*x1)+cos(2*pi*x2))/2)+20+2.71289',[Ibx1,ubx1,Ibx2,ubx2],50);%画出函数曲线 hoIdon; %%定义遗传算法参数 NIND=40;%个体数目 MAXGEN=50;%最大遗传代数 PRECI=20;%变量的二进制位数 GGAP=0.95;%代沟 px=0.7;%交叉概率 pm=0.01;%变异概率 trace=zeros(3,MAXGEN);%寻优结果的初始值 FieIdD=[PRECIPRECI;IbxIby;ubxuby;11;00;11;11];%区域描述器Chrom=crtbp(NIND,PRECI*2);%初始种群 %%优化 gen=0;%代计数器 XY=bs2rv(Chrom,FieIdD);%计算初始种群的十进制转换 X=XY(: 1);Y=XY(: 2); ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);%计算目标函数值 whiIegen FitnV=ranking(-ObjV);%分配适应度值 SeICh=seIect('sus',Chrom,FitnV,GGAP);%选择 SeICh=recombin('xovsp',SeICh,px);%重组 SeICh=mut(SeICh,pm);%变异 XY=bs2rv(SeICh,FieIdD);%子代个体的十进制转换 X=XY(: 1);Y=XY(: 2); ObjVSeI=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);%计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SeICh,1,1,ObjV,ObjVSeI);%重插入子代到父代,得到新种群 XY=bs2rv(Chrom,FieIdD); gen=gen+1;%代计数器增加 %获取每代的最优解及其序号,Y为最优解,1为个体的序号 [Y,I]=max(ObjV); trace(1: 2,gen)=XY(I,: );%记下每代的最优值trace(3,gen)=Y;%记下每代的最优值 end pIot3(trace(1,: ),trace(2,: ),trace(3,: ),'bo');%画出每代的最优点 gridon; pIot3(XY(: 1),XY(: 2),ObjV,'bo');%画出最后一代的种群 holdoff %%画进化图figure (2); plot(1: MAXGEN,trace(3,: )); gridon xlabel('遗传代数') ylabel('解的变化')title('进化过程')bestZ=trace(3,end);bestX=trace(1,end);bestY=trace(2,end); fprintf(['最优解: \nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n'])
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gatbx 遗传 算法 工具箱 gaSVMcgForClass 详细 例子