搜档网
当前位置:搜档网 › gatbx遗传算法工具箱之gaSVMcgForClass详细例子

gatbx遗传算法工具箱之gaSVMcgForClass详细例子

gatbx遗传算法工具箱之gaSVMcgForClass详细例子
gatbx遗传算法工具箱之gaSVMcgForClass详细例子

遗传算法

1.遗传算法的简单原理

遗传算法(Genetic Algorithm, GA)是一种基于自然群体遗传演化机制的高效探索算法,它摒弃了传统的搜索方式,模拟自然界生物进化过程,采用人工进化的方式对目标空间进行随机化搜索。它将问题域中的可能解看作是群体的一个个体或染色体,并将每一个体编码成符号串形式,模拟达尔文的遗传选择和自然淘汰的生物进化过程,对群体反复进行基于遗传学的操作(遗传,交叉和变异),根据预定的目标适应度函数对每个个体进行评价,依据适者生存,优胜劣汰的进化规则,不断得到更优的群体,同时以全局并行搜索方式来搜索优化群体中的最优个体,求得满足要求的最优解。

我们先通过一个例子来了解遗传算法的原理:假定我们要求函数2

=

f x x

()

的极大值,其中x为自然数,031

≤≤。现在,我们将每一个数看成一个生命体,

x

通过进化,我们看谁能最后生存下来,谁就是我们所寻找的数。

①.编码:我们将每一个数作为一个生命体,那么必须给其赋予一定的基因,这个过程叫做编码。我们可以把变量x编码成5位长的二进制无符号整数表示形式,比如13

x=可表示为01101的形式,也就是说,数13的基因为01101。

②.初始群体的生成:由于遗传的需要,我们必须设定一些初始的生物群体,让其作为生物繁殖的第一代,需要说明的是,初始群体的每个个体都是通过随机方法产生的,这样便可以保证生物的多样性和竞争的公平性。

③.适应度评估检测:生物的进化服从适者生存,优胜劣汰的进化规则,因此,我们必须规定什么样的基因是“优”的,什么样的基因是“劣”的,在这里,我们称

为适应度

...。显然,由于我们要求的最大值,因此,能使函数值较大的基因是优的,使函数值较小的基因是劣的,因此,我们可以将原函数2

=定义为适应度函

f x x

()

数,用来衡量某一生物体的适应程度。

④.选择:接下来,我们便可以进行优胜劣汰的过程,这个过程在遗传算法里叫做选择。注意,选择应该是一个随机的过程,基因差的生物体不一定会被淘汰,只是其被淘汰概率比较大罢了,这与自然界中的规律是相同的。因此,我们可以采取赌轮的方式来进行选择。

⑤.交叉操作:接下来进行交叉繁殖,随机选出两个生物体,让其交换一部分基因,这样便形成了两个新的生物体,为第二代。

⑥.变异:生物界中不但存在着遗传,同时还存在着变异,在这里我们也引入变异,使生物体的基因中的某一位以一定的概率发生变化,这样引入适当的扰动,能避免局部极值的问题。

以上的算法便是最简单的遗传算法,通过以上步骤不断地进化,生物体的基因便逐渐地趋向最优,最后便能得到我们想要的结果。

2.遗传算法的步骤

从上面的例子中,我们便能得到遗传算法的一般步骤,如下图所示:

3.遗传算法的应用

遗传算法主要是用来寻优,它具有很多优点:它能有效地避

免局部最优现象,有及其顽强的鲁棒性,并且在寻优过程中,基本不需要任何搜索空间的知识和其他辅助信息等等。为了介绍遗传算法的应用,我们将前面的例子进行完,整个过程如下:

初始群体01101 11000 01000 10011

x的值13 24 8 19

适应度()

f x169 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)使用MATLAB高级语言编写;

2)对问题使用M文件编写,可以看见源代码;

3)为用户提供了广泛多样的实用函数。

②安装:1)解压谢尔菲德遗传算法工具箱,得到谢尔菲德遗传算法工具箱文件夹,内含DOC文件夹与gatbx文件夹;

2)将谢尔菲德遗传算法工具箱文件夹拷贝到MATLAB\bin目录下;

3)为谢尔菲德遗传算法工具箱文件设置工作路径:双击MATLAB,运行MATLAB,在MATLAB窗口中选择路径设置窗口:Set path;

4)在Set path中选择 Add folder项;

5)设置如下:

…\谢尔菲德遗传算法工具箱文件;

…\谢尔菲德遗传算法工具箱文件\DOC;

…\谢尔菲德遗传算法工具箱文件\gatbx;

…\谢尔菲德遗传算法工具箱文件\gatbx\test_fns。

点击SAVE保存,再点击CLOSE关闭Set path窗口。

6)将文件夹的所有字母改为小写字母。

7)测试:在Command Window窗口键入:help crtbp。

③谢尔菲德遗传算法工具箱中主要函数

④常用函数

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,[2 3 4 5 6 7 8 9]) 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

⑤谢尔菲德遗传算法工具箱应用举例

例1. 用遗传算法求

sin(10)

(),[1,2]

x

f x x

x

π

=∈的最小值。

程序清单如下:

clc

clear all

close all

%% 画出函数图

figure(1);

hold on;

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; %计算目标函数值

while gen

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,I]=min(ObjV);

trace(1,gen)=X(I); %记下每代的最优值 trace(2,gen)=Y; %记下每代的最优值 end

plot(trace(1,:),trace(2,:),'bo'); %画出每代的最优点 grid on;

plot(X,ObjV,'b*'); %画出最后一代的种群 hold off

%% 画进化图 figure(2);

plot(1:MAXGEN,trace(2,:)); grid on

xlabel('遗传代数') ylabel('解的变化') title('进化过程') bestY=trace(2,end); bestX=trace(1,end);

fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])

例2. 用遗传算法求(,)cos(2)sin(2),,[2,2]f x y x y y x x y ππ=+∈-的最大值。

程序清单如下:

clc

clear all close all

%% 画出函数图 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); %画出函数曲线 hold on;

%% 定义遗传算法参数 NIND=40; %个体数目

MAXGEN=50; %最大遗传代数 PRECI=20; %变量的二进制位数 GGAP=0.95; %代沟 px=0.7; %交叉概率 pm=0.01; %变异概率

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

FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器 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); %计算目标函数值 while gen

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 为最优解,I 为个体的序号 [Y,I]=max(ObjV);

trace(1:2,gen)=XY(I,:); %记下每代的最优值 trace(3,gen)=Y; %记下每代的最优值 end

plot3(trace(1,:),trace(2,:),trace(3,:),'bo'); %画出每代的最优点 grid on;

plot3(XY(:,1),XY(:,2),ObjV,'bo'); %画出最后一代的种群 hold off

%% 画进化图 figure(2);

plot(1:MAXGEN,trace(3,:)); grid on

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'])

⑥作业:用遗传算法求函数

12

cos 2cos 2()20exp(exp()20 2.712892

x x f x ππ+=---++

的最小值。

clc

clear all

close all

%% 画出函数图

figure(1);

lbx1=-2;ubx1=2; %函数自变量x1范围[-2,2]

lbx2=-2;ubx2=2; %函数自变量x2范围[-2,2]

ezmesh('-20*exp(-0.2*sqrt((x1^2+x2^2)/2))-exp((cos(2*pi*x1)+cos(2*pi*x2))/2)+20+2.7128 9',[lbx1,ubx1,lbx2,ubx2],50); %画出函数曲线

hold on;

%% 定义遗传算法参数

NIND=40; %个体数目

MAXGEN=50; %最大遗传代数

PRECI=20; %变量的二进制位数

GGAP=0.95; %代沟

px=0.7; %交叉概率

pm=0.01; %变异概率

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

FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器

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); %计算目标函数值

while gen

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为最优解,I为个体的序号

[Y,I]=max(ObjV);

trace(1:2,gen)=XY(I,:); %记下每代的最优值

trace(3,gen)=Y; %记下每代的最优值

end

plot3(trace(1,:),trace(2,:),trace(3,:),'bo'); %画出每代的最优点

grid on;

plot3(XY(:,1),XY(:,2),ObjV,'bo'); %画出最后一代的种群

hold off

%% 画进化图

figure(2);

plot(1:MAXGEN,trace(3,:));

grid on

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'])

遗传算法求解实例

yj1.m :简单一元函数优化实例,利用遗传算法计算下面函数的最大值 0.2)*10sin()(+=x x x f π,∈x [-1, 2] 选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9, 最大遗传代数为25 译码矩阵结构:?????????? ??????? ???? ?=ubin lbin scale code ub lb len FieldD 译码矩阵说明: len – 包含在Chrom 中的每个子串的长度,注意sum(len)=length(Chrom); lb 、ub – 行向量,分别指明每个变量使用的上界和下界; code – 二进制行向量,指明子串是怎样编码的,code(i)=1为标准二进制编码, code(i)=0则为格雷编码; scale – 二进制行向量,指明每个子串是否使用对数或算术刻度,scale(i)=0为算术 刻度,scale(i)=1则为对数刻度; lbin 、ubin – 二进制行向量,指明表示范围中是否包含每个边界,选择lbin=0或 ubin=0,表示从范围中去掉边界;lbin=1或ubin=1则表示范围中包含边界; 注:增加第22行:variable=bs2rv(Chrom, FieldD);否则提示第26行plot(variable(I), Y, 'bo'); 中variable(I)越界 yj2.m :目标函数是De Jong 函数,是一个连续、凸起的单峰函数,它的M 文件objfun1包含在GA 工具箱软件中,De Jong 函数的表达式为: ∑ == n i i x x f 1 2 )(, 512512≤≤-i x 这里n 是定义问题维数的一个值,本例中选取n=20,求解 )(min x f ,程序主要变量: NIND (个体的数量):=40; MAXGEN (最大遗传代数):=500; NV AR (变量维数):=20; PRECI (每个变量使用多少位来表示):=20; GGAP (代沟):=0.9 注:函数objfun1.m 中switch 改为switch1,否则提示出错,因为switch 为matlab 保留字,下同! yj3.m :多元多峰函数的优化实例,Shubert 函数表达式如下,求)(min x f 【shubert.m 】

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

遗 传 算 法 详 解 ( 含 M A T L A B 代 码 )

GATBX遗传算法工具箱函数及实例讲解 基本原理: 遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: Step 1:对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概 率以及遗传运算的终止进化代数。 Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。 Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。

Step 6:按变异概率执行离散变异操作。 Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。 运用遗传算法工具箱: 运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。实际上,GADS就是大家所看到的Matlab中自带的工具箱。我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。 以GATBX为例,运用GATBX时,要将GATBX解压到Matlab下的toolbox文件夹里,同时,set path将GATBX文件夹加入到路径当中。 这块内容主要包括两方面工作:1、将模型用程序写出来(.M文件),即目标函数,若目标函数非负,即可直接将目标函数作为适应度函数。2、设置遗传算法的运行参数。包括:种群规模、变量个数、区域描述器、交叉概率、变异概率以及遗传运算的终止进化代数等等。

MATLAB实验遗传算法与优化设计

实验六 遗传算法与优化设计 一、实验目的 1. 了解遗传算法的基本原理和基本操作(选择、交叉、变异); 2. 学习使用Matlab 中的遗传算法工具箱(gatool)来解决优化设计问题; 二、实验原理及遗传算法工具箱介绍 1. 一个优化设计例子 图1所示是用于传输微波信号的微带线(电极)的横截面结构示意图,上下两根黑条分别 代表上电极和下电极,一般下电极接地,上电极接输入信号,电极之间是介质(如空气,陶瓷等)。微带电极的结构参数如图所示,W 、t 分别是上电极的宽度和厚度,D 是上下电极间距。当微波信号在微带线中传输时,由于趋肤效应,微带线中的电流集中在电极的表面,会产生较大的欧姆损耗。根据微带传输线理论,高频工作状态下(假定信号频率1GHz ),电极的欧姆损耗可以写成(简单起见,不考虑电极厚度造成电极宽度的增加): 图1 微带线横截面结构以及场分布示意图 {} 28.6821ln 5020.942ln 20.942S W R W D D D t D W D D W W t D W W D e D D παπππ=+++-+++?????? ? ??? ??????????? ??????? (1) 其中πρμ0=S R 为金属的表面电阻率,为电阻率。可见电极的结构参数影响着电极损

耗,通过合理设计这些参数可以使电极的欧姆损耗做到最小,这就是所谓的最优化问题或者称为规划设计问题。此处设计变量有3个:W 、D 、t ,它们组成决策向量[W, D ,t ] T ,待优化函数(,,)W D t α称为目标函数。 上述优化设计问题可以抽象为数学描述: ()()min .. 0,1,2,...,j f X s t g X j p ????≤=? (2) 其中()T n x x x X ,...,,21=是决策向量,x 1,…,x n 为n 个设计变量。这是一个单目标的数学规划问题:在一组针对决策变量的约束条件()0,1,...,j g X j p ≤=下,使目标函数最小化(有时 也可能是最大化,此时在目标函数()X f 前添个负号即可)。满足约束条件的解X 称为可行解,所有满足条件的X 组成问题的可行解空间。 2. 遗传算法基本原理和基本操作 遗传算法(Genetic Algorithm, GA)是一种非常实用、高效、鲁棒性强的优化技术,广 泛应用于工程技术的各个领域(如函数优化、机器学习、图像处理、生产调度等)。遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化算法。按照达尔文的进化论,生物在进化过程中“物竞天择”,对自然环境适应度高的物种被保留下来,适应度差的物种而被淘汰。物种通过遗传将这些好的性状复制给下一代,同时也通过种间的交配(交叉)和变异不断产生新的物种以适应环境的变化。从总体水平上看,生物在进化过程中子代总要比其父代优良,因此生物的进化过程其实就是一个不断产生优良物种的过程,这和优化设计问题具有惊人的相似性,从而使得生物的遗传和进化能够被用于实际的优化设计问题。 按照生物学知识,遗传信息基因(Gene)的载体是染色体(Chromosome),染色体中 一定数量的基因按照一定的规律排列(即编码),遗传基因在染色体中的排列位置称为基因

(实例)matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解 核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B], 如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverO ps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】 bounds--代表变量上下界的矩阵 evalFN--适应度函数 evalOps--传递给适应度函数的参数 startPop-初始种群 opts[epsilon prob_ops display]--opts(1:2)等同于initializega 的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0] termFN--终止函数的名称,如['maxGenTerm'] termOps--传递个终止函数的参数,如[100] selectFN--选择函数的名称,如['normGeomSelect'] selectOps--传递个选择函数的参数,如[0.08] xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover'] xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0] mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation'] mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]

Matlab遗传算法工具箱的应用

文章编号:1006-1576(2005)06-0115-02 Matlab遗传算法工具箱的应用 曾日波 (江西财经大学电子学院,江西南昌 330013) 摘要:Matlab遗传算法(GA)优化工具箱是基于基本操作及终止条件、二进制和十进制相互转换等操作的综合函数库。其实现步骤包括:通过输入及输出函数求出遗传算法主函数、初始种群的生成函数,采用选择、交叉、变异操作求得基本遗传操作函数。以函数仿真为例,对该函数优化和GA改进,只需改写函数m文件形式即可。 关键词:遗传算法;Matlab;遗传算法工具箱;仿真 中图分类号:TP391.9 文献标识码:A Application of Genetic Algorithm Toolbox Based on Matlab ZENG Ri-bo (College of Finance and Economics Electronics, Jiangxi University, Nanchang 330013, China) Abstract: The optimization toolbox of Matlab genetic algorithm (GA) is a excellent generalized function library is to bases on basic operation and terminate term, the inter-conversion between binary system and ten system the system etc. Its step includes: the main function of GA and the creation functions of initial population was calculated through inputting and outputting functions, and the basic functions of genetic operation was computed by choosing, interlacing, and aberrance functions to realize the system. Take the function simulation as an example, the optimization of function and improvement of GA were achieved by modification the file format of m function. Keywords: Genetic algorithm; Matlab; Optimization toolbox; Simulation 1 引言 遗传算法(GA:Genetic Algorithm)是对生物进化过程进行的数学方式仿真。将Matlab引入遗传算法,在Matlab平台上开发遗传算法的优化工具箱(GAOT:Genetic Algorithm for Optimization Toolbox),可更好地认识GA,改进GA。 2 基于Matlab的优化工具箱 遗传算法的优化工具箱(GAOT)是从遗传算法的基本结构出发,考虑到基本操作及终止条件、二进制和十进制的相互转换等操作的综合函数库。 2.1遗传算法主函数 function[x,endPop,bPop,traceInfo]= ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps, selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) 输出参数:x-最优解,endPop-最终种群,bPop-最优种群的搜索轨迹。 输入参数:bounds-变量上下界的矩阵,evalFN-适应度函数,evalOps-传递给适应度函数的参数,startPop-初始种群,termFN-终止函数的名称,termOps-传递个终止函数的参数,selectFN -选择函数的名称,selectOps-传递个选择函数的参数,xOverFNs-交叉函数名称表,以空格分开,xOverOps-传递给交叉函数的参数表,mutFNs-变异函数表,mutOps-传递给交叉函数的参数表。 2.2 初始种群的生成函数 function[pop]=initializega (num,bounds,eevalFN,eevalOps,options) 输出参数:pop-生成的初始种群。 输入参数:num-种群中的个体数目,bounds -代表变量的上下界的矩阵,eevalFN-适应度函数,eevalOps-传递给适应度函数的参数,options -选择编码形式(浮点编码或是二进制编码)[precision F_or_B],precision-变量进行二进制编码时指定的精度,F_or_B-为1时选择浮点编码,否则为二进制编码,由precision指定精度)。 2.3 基本遗传操作函数 (1) 选择 function[newPop] = Select(oldPop,options) 参数说明:newPop-由父代种群选出的新的种群,oldPop-当前的种群(即父代种群),options -选择概率。 (2) 交叉 function [c1,c2]=crossover(p1,p2,bounds,ops) 参数说明:p1-第一个父代个体,p2-第二个父代个体,bounds-可行域的边界矩阵,c1、c2-产生的两个新的子代。 (3) 变异 function [child] = Mutation(par,bounds,genInfo,Ops) 变异操作是由一个父代产生单个子代。 3 仿真实例与分析 收稿日期:2005-06-15;修回日期:2005-08-07 作者简介:曾日波(1964-),男,江西人,2000年获华中科技大学工程硕士学位,从事嵌入式系统的应用研究。 ·115·

遗传算法程序示例

遗传算法程序示例 %% I. 清空环境变量 %optimtool solver 中选择GA %添加gaot工具箱 clear all clc %% II. 绘制函数曲线 x = 0:0.01:9; y = x + 10*sin(5*x)+7*cos(4*x); figure plot(x, y) xlabel('自变量') ylabel('因变量') title('y = x + 10*sin(5*x) + 7*cos(4*x)') grid %% III. 初始化种群 initPop = initializega(50,[0 9],'fitness'); %种群大小;变量变化范围;适应度函数的名称 %看一下initpop 第二列代表适应度函数值 %% IV. 遗传算法优化 [x endPop bpop trace] = ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,... 'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]); %变量范围上下界;适应度函数;适应度函数的参数;初始种群;精度和显示方式;终止函数的名称; %终止函数的参数;选择函数的名称;选择函数的参数;交叉函数的名称;交叉函数的参数;变异函数的 %名称;变异函数的参数 % X 最优个体endpop 优化终止的最优种群bpop 最优种群的进化轨迹trace 进化迭代过程中 %最优的适应度函数值和适应度函数值矩阵 %% V. 输出最优解并绘制最优点 x hold on plot (endPop(:,1),endPop(:,2),'ro')

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

出必精品:雷英杰《Matlab遗传算法工具箱及应用》Sheffield大学gatbs工具箱所有算例下载及调试说明

出必精品:雷英杰《Matlab遗传算法工具箱及应用》 Sheffield大学gatbs工具箱所有算例下载及调试说明 这段时间对雷英杰编著《Matlab遗传算法工具箱及应用》涉及Sheffield大学gatbs工具箱的所有算例进行了调试,并修正了一些算例源码中的错误,具体注释可见附件,几点说明如下: 1.附件结构: gatbx.rar: (1)gatbx-origin.zip; (2)gatbx-toolbox.rar; (3)gatbx-example.rar 2.调试所用Matlab版本是6.5,gatbx-toolbox是调试过程中使用的工具箱,有些热心的研友已经提供了该工具箱,之所以再贴一遍,是因为6.5版本下调试该工具箱会出现一些错误提示,在该版本中已经进行了改正,使用该工具箱只需要将压缩包下的gatbx和gatbx\Test_fns加入到Matlab搜索路径即可,另外gatbx-origin是Sheffield大学提供的原始版本的工具箱,未做任何改动,两者可做比较之用 3.gatbx-example是算例调试源码和各算例的调试说明,大家可以对照原书进行比较 4.窃以为gatbx工具箱较之Matlab7新版下的gads工具箱更能让人熟悉和了解遗传算法的原理和计算过程,虽然在可视化方面不及gads 5.学习遗传算法如果首先用熟相关工具箱的话,能够先培养信心,然后更有兴趣去专研和了解具体的算法,如果就用现有的工具箱就能解决问题的话,不了解其详细的算法也未尝不可,毕竟不是每个研友都能向see_moonlight那样开发自己的工具箱吧, 最后感谢see_moonlight斑竹的大力支持和鼓励,在此谨致谢意~

【实用资料】Matlab遗传算法工具箱简介.pdf

Matlab遗传算法工具箱 基于Matlab平台的遗传算法(GA)工具箱主要有:美国北卡罗来纳大学开发的GAOT、英国谢菲尔德大学开发的GATBX以及GADS(Genetic Algorithm and Direct Search Toolbox)遗传算法与直接搜索工具箱。遗传算法与直接搜索工具箱的界面如图所示: GADS工具箱用户界面 (1)Solver(求解器):用于选择需要的算法。 (2)Problem:需要解决的问题。包括: 1)Fitness function:需要最小化的适应度函数,填写的格式为:@objfun,其中objfun.m是编写适应度函数的M文件,返回一个具体数值。 2)Number of variables:适应度函数的自变量的数目,此处表示优化设计的设计变量个数。 (3)Constraints约束。 1)Linear inequalities线性不等式约束,表示为:* ,填写矩阵A和向 A x b 量b的信息。

2)Linear equalities 线性等式约束,表示为:*Aeq x beq ,填写矩阵Aeq 和向量beq 的信息。 3)Bounds :填写独立变量的取值范围。在Lower 中填写变量的取值下界,Upper 中填写变量的取值上界,均以向量形式表示。 4)Nonlinear constraint function 非线性约束函数,编写非线性约束函数的M 文件nonlcon.m ,则在此处填写@nonlcon 。 (4)Run solver and view results 运行求解器并观察结果。点击Start 即可开始运行。Current iteration 中将显示当前运行的代数。Final point 栏中显示最优解对应的变量的取值。 (5)Option 部分是遗传算法参数的设定。 1)Population 种群参数设定。 Population type 种群类型,设定适应度函数的输入数据类型。工具箱提供了 两种输入类型:双精度、串位,用户还可以编写M 文件自定义输入数据的类型。 Population size 种群规模,定义每一代种群的个体数量。种群规模越大,遗传算法的运行速度越慢。 Creation function 创建函数,用于创建初始种群。 Initial population 初始种群,如果不指定初始种群,则系统将运用创建函数创建初始种群。 Initial scores 初始得分,如果此处没有定义初始得分,则系统应用适应度函数来计算初始得分。 Initial range 初始范围,用于指定初始种群中的各变量的上下限。初始范围用一个矩阵表示,该矩阵行数为2,列数为变量的个数。其中第一行描述初始种群中变量的取值下限,第二行描述初始种群中变量的取值上限。 2)Fitness scaling 适应度测量,包括:Rank 排序尺度变换、Proportional 比例尺度变换、Top 顶级尺度变换、Shift linear 线性转换尺度变换以及Custom 用户自定义。 3)Selection 选择,工具箱提供了以下几种选择函数:Stochastic uniform 随机 均匀分布、 Remainder 剩余、Uniform 均匀分布、Roulette 轮盘赌选择、Tournament 锦标赛选项、Custom 用户自定义。 4)Reproduction 再生参数,需设定可生存到下一代的精英个数Elite count ,以及下一代由交叉产生的部分所占比例Crossover fraction 。

用遗传算法优化BP神经网络的Matlab编程实例

用遗传算法优化BP神经网络的 Matlab编程实例 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP 算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=premnmx(XX); YY=premnmx(YY); %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},' trainlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数 %下面调用gaot工具箱,其中目标函数定义为gabpEval [x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,... 'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutatio n',[2 gen 3]); %绘收敛曲线图 figure(1) plot(trace(:,1),1./trace(:,3),'r-'); hold on plot(trace(:,1),1./trace(:,2),'b-'); xlabel('Generation'); ylabel('Sum-Squared Error'); figure(2) plot(trace(:,1),trace(:,3),'r-'); hold on plot(trace(:,1),trace(:,2),'b-'); xlabel('Generation'); ylabel('Fittness'); %下面将初步得到的权值矩阵赋给尚未开始训练的BP网络 [W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x); net.LW{2,1}=W1; net.LW{3,2}=W2; net.b{2,1}=B1; net.b{3,1}=B2; XX=P; YY=T; %设置训练参数 net.trainParam.show=1; net.trainParam.lr=1; net.trainParam.epochs=50; net.trainParam.goal=0.001; %训练网络 net=train(net,XX,YY); 程序二:适应值函数 function [sol, val] = gabpEval(sol,options) % val - the fittness of this individual % sol - the individual, returned to allow for Lamarckian evolution % options - [current_generation] load data2 nntwarn off XX=premnmx(XX); YY=premnmx(YY); P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 for i=1:S, x(i)=sol(i); end; [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);

最新最全的遗传算法工具箱及说明

最新最全的遗传算法工具箱Gaot_v5及说明 Gaot_v5下载地址:https://www.sodocs.net/doc/b48421212.html,/mirage/GAToolBox/gaot/gaotv5.zip 添加遗传算法路径: 1、 matlab的file下面的set path把它加上,把路径加进去后在 2、 file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下,就OK了

遗传算法工具箱Gaot_v5包括许多实用的函数,各种算子函数,各种类型的选择方式,交叉、变异方式。这些函数按照功能可以分成以下几类:

主程序 ga.m提供了 GAOT 与外部的接口。它的函数格式如下: [x endPop bPop traceInfo]=ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps, selectFn,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) 输出参数及其定义如表 1 所示。输入参数及其定义如表 2 所示。 表1 ga.m的输出参数 输出参数 定义 x 求得的最好的解,包括染色体和适应度 endPop 最后一代染色体(可选择的) bPop 最好染色体的轨迹(可选择的) traceInfo 每一代染色体中最好的个体和平均适应度(可选择的) 表2 ga.m的输入参数 表3 GAOT核心函数及其它函数

核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】

matlab自带优化工具箱遗传算法中文解释

matlab自带优化工具箱遗传算法中文解释 problem setup and results设置与结果 problem fitness function适应度函数 number of variable变量数 constraints约束 linear inequalities线性不等式,A*x<=b形式,其中A是矩阵,b是向量 linear equalities线性等式,A*x=b形式,其中A是矩阵,b是向量 bounds定义域,lower下限,upper上限,列向量形式,每一个位置对应一个变量 nonlinear constraint function非线性约束,用户定义,非线性等式必须写成c=0形式,不等式必须写成c<=0形式 integer variable indices整型变量标记约束,使用该项时Aeq和beq必须为空,所有非线性约束函数必须返回一个空值,种群类型必须是实数编码 run solver and view results求解 use random states from previous run使用前次的状态运行,完全重复前次运行的过程和结果 population population type编码类型 double vector实数编码,采用双精度 bitstring二进制编码对于生成函数和变异函数,只能选用uniform和custom,对于杂交函数,只能使用 scattered singlepoint,twopoint或custom不能使用hybrid function和nonlinear constraint function custom 自定义 population size:种群大小 creation function:生成函数,产生初始种群 constraint dependent:约束相关,无约束时为uniform,有约束时为feasible population uniform:均匀分布 feasible population :自适应种群,生成能够满足约束的种群 initial population:初始种群,不指定则使用creation function生成,可以指定少于种群数量的种群,由creation function完成剩余的 initial scores:初始值,如果不指定,则有计算机计算适应度函数作为初始值,对于整型约束不可用,使用向量表示 initial range:初始范围,使用向量矩阵表示,第一行表示范围的下限,第二行表示上限 fitness scaling:适应度尺度 rank:等级。将适应度排序,然后编号 proportional:按比例 top:按比例选取种群中最高适应度的个体,这些个体有等比例的机会繁衍,其余的个体被淘汰 shift linear:线性转换

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

相关主题