matlab遗传算法⼯具箱介绍和详细使⽤⽅法【matlab优化算法⼯具箱】
遗传算法概述
遗传算法( genetic algorithm,GA)是⼀种进化算法,其基本原理是仿效⽣物界中的“物竞天择、适者⽣存”的演化法则。遗传算法是把问题参数编码为染⾊体,再利⽤迭代的⽅式进⾏选择、交叉以及变异等运算来交换种中染⾊体的信息,最终⽣成符合优化⽬标的染⾊体。在遗传算法中,染⾊体对应的是数据或数组,通常是由⼀维的串结构数据来表⽰,串上各个位置对应基因的取值。基因组成的串就是染⾊体,或者称为基因型个体( individuals)。⼀定数量的个体组成了体( population)。体中个体的数⽬称为体⼤⼩( population size),也称为体规模。⽽各个个体对环境的适应程度叫做适应度( fitness)。
遗传算法的基本步骤如下:
1.编码
GA在进⾏搜索之前先将解空间的解数据表⽰成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点
2.初始体的⽣成
随机产⽣N个初始串结构数据,每个串结构数据称为⼀个个体,N个个体构成了⼀个体。GA以这N个串结构数据作为初始点开始进化。
3.适应度评估
适应度表明个体或解的优劣性。不同的问题,适应性函数的定义⽅式也不同
4.选择
选择的⽬的是为了从当前体中选出优良的个体,使它们有机会作为⽗代为下⼀代繁殖⼦孙。遗传算法通过选择过程体现这⼀思想,进⾏选择的原则是适应性强的个体为下⼀代贡献⼀个或多个后代的概率⼤。选择体现了达尔⽂的适者⽣存原则
5.交叉
交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新⼀代个体,新个体组合了其⽗辈个体的特性。交叉体现了信息交换的思想。
6.变异
变异⾸先在体中随机选择⼀个个体,对于选中的个体以⼀定的概率随机地改变串结构数据中某个串的值。同⽣物界⼀样,GA中变异发⽣的概率很低,通常取值很⼩。
⼯具箱添加
⽤户可以通过⽹络下载 Sheffield⼯具箱,然后把⼯具箱添加到本机的 MATLAB环境中,⼯具箱的安装步骤如下:
(1)将⼯具箱⽂件夹复制到本地计算机中的⼯具箱⽬录下,路径为 matlabroot\ toolbox其中 matlabroot为 MATLAB的安装根⽬录。(2)将⼯具箱所在的⽂件夹添加到 MATLAB的搜索路径中,有两种⽅式可以实现,即命令⾏⽅式和图形⽤户界⾯⽅式。
到⼯具箱所在的⽂件夹( gatbx),单击“OK”按钮,则⼯具箱所在的⽂件夹出现在
“ MATLAB search path”的最上端。单击“Save”按钮保存搜索路径的设置,然后单击“ Close”
按钮关闭对话框。
(3)查看⼯具箱是否安装成功。
使⽤函数ver查看 gatbx⼯具箱的名字、发⾏版本、发⾏字符串及发⾏⽇期,如果返回均为空,则说明安装未成功;如果返回了相应的参数,则表明⼯具箱安装成功,该⼯具箱就可以使⽤。
⼯具箱结构
遗传算法⼯具箱中的主要函数
遗传算法常⽤函数
1.创建种函数— crbp 功能:刨建任意离散随机种。
tool工具箱调⽤格式:
1【Chrom, Lind, Basev】= crtbp(Nind, Lind)
2 【Chrom, Lind, Base v】=crtbp(Nind, Base)
3 【Chrom, Lind, Basev】= crtbp(Nind, Lind, Base)
格式①创建⼀个⼤⼩为Nind×Lind的随机⼆进制矩阵,其中,Nind为种个体数,Lind为个体长度。返回种编码 Chrom和染⾊体基因位的基本字符向量 Base v。
格式②创建⼀个种个体为Nind,个体的每位编码的进制数由Base决定(Base的列数即为个体长度)。
格式③创建⼀个⼤⼩为Nind×Lind的随机矩阵,个体的各位的进制数由Base决定,这时输⼊参数Lind可省略(Base的列数即为Lind),即为格式②。
【⽤法举例】使⽤函数 crbp创建任意离散随机种的应⽤举例
(1)创建⼀个种⼤⼩为5,个体长度为10的⼆进制随机种:
>>【Chrom, Lind, Basev】=crtbp(5,10)
(2)创建⼀个种⼤⼩为5,个体长度为8,各位的进制数分别为{2,3,4,5,6,7,8,9}:
>【Chrom, Lind, Base v】=crtbp(5,8,【23456789】)
2.适应度计算函数— ranking功能:基于排序的适应度分配。
调⽤格式:
① FitnV= ranking(0bjv
(2 Fitnv= ranking(Obj, RFun)
3 Fitnv= ranking(Obj, RFun, SUBPOP格式①是按照个体的⽬标值ObV(列向量)由⼩到⼤的顺序对个体进⾏排序的,并返回个体适应度值FtnV的列向量。
格式②中RFun有三种情况:
(1)若RFun是⼀个在【1,2】区间内的标量,则采⽤线性排序,这个标量指定选择的压差
(2)若RFun是⼀个具有两个参数的向量,则RFun(2):指定排序⽅法,0为线性排序,1为⾮线性排序。
RFun(1):对线性排序,标量指定的选择压差RFun(1)必须在【1,2】区间;对⾮线性排序,RFun(1)必须在【1,
length(ObV)-2】区间;如果为NAN,则RFun(1)假设为2。
(3)若RFun是长度为 length(ObjV)的向量,则它包含对每⼀⾏的适应度值计算格式③中的参数ObjV和RFun与格式①和格式②⼀致,参数 SUBPOP是⼀个任选参数,指明在ObjⅤ中⼦种的数量。省略 SUBPOP或 SUBPOP为NAN,则 SUBPOP=1.在ObV中的所有⼦种⼤⼩必须相同。如果 ranking被调⽤于多⼦种,则 ranking独⽴地对每个⼦种执⾏。
3.选择函数— elect功能:从种中选择个体(⾼级函数)
调⽤格式:
1 Selch= select(SEL F, Chrom, Fitnv)
2 Selch= select(SEL, F, Chrom, FitnV, GGAP)
3 Selch= select(SEL F, Chrom, FitnV, GGAP, SUBPOP)
SELF是⼀个字符串,包含⼀个低级选择函数名,如rws或sus Fitnv是列向量,包含种 Chrom中个体的适应度值。这个适应度值表明了每个个体被选择的预期概率。
GGAP是可选参数,指出了代沟部分种被复制。如果GGAP省略或为NAN,则GGAP假设为1.0。
SUBPOP是⼀个可选参数,决定 Chron中⼦种的数量。如果 SUBPOP省略或为NAN,则 SUBPOP=1。 Chrom中所有⼦种必须有相同的⼤⼩
4.交叉算⼦函数— recombin功能:重组个体(⾼级函数)。
调⽤格式:
1 NewChrom= recombin (REC F, Chrom)
2 NewChrom= recombin(REC F, Chrom, Recopt)
3 NewChrom= recombin(REC F, Chrom, RecOpt, SUBPOP)
recombin完成种 Chrom中个体的重组,在新种 NewChron中返回重组后的个体。
Chrom和 New Chrom中的⼀⾏对应⼀个个体。
RECF是⼀个包含低级重组函数名的字符串,例如 ecdis或 XoVsP。
RecEpt是⼀个指明交叉概率的任选参数,如省略或为NAN,将设为缺省值。
SUBPOP是⼀个决定 Chrom中⼦个数的可选参数,如果省略或为NAN,则 SUBPOP为1。 Chrom中的所有⼦种必须有相同的⼤⼩。
5.变异算⼦函数—mut功能:离散变异算⼦。
调⽤格式:Newchroa=mt( older.m,P,BaeV Old Chrom为当前种,Pm为变异概率(省略时为0.7/Lind), Base指明染⾊体个体元素的变异的基本字符(省略时种为⼆进制编码)。
6.重插⼊函数— . reins功能:重插⼊⼦代到种调⽤格式:
1Chrom= reins(Chrom, Selch)
2 Chrom reins(Chrom, Selch, SUBPOP)
3 Chrom= reins (Chrom, SelCh, SUBPOP, InsOpt, ObjVCh)
【Chrom, Objvch】=reinsChrom, SelCh, SUBPOP, Insopt, ObjVCh, ObjVSel)
reins完成插⼊⼦代到当前种,⽤⼦代代替⽗代并返回结果种。 Chron为⽗代种SelCh为⼦代,每⼀⾏对应⼀个个体SUBPOP是⼀个可选参数,指明 Chron和SlCh中⼦种的个数。如果省略或者为NAN,则假设为1.在 Chrom和SlCh中每个⼦种必须具有相同⼤⼩。InsOpt是⼀个最多有两个参数的任选向量。
InsOpt(1)是⼀个标量,指明⽤⼦代代替⽗代的⽅法。0为均匀选择,⼦代代替⽗代使⽤均匀随机选择。1为基于适应度的选择,⼦代代替⽗代中适应度最⼩的个体。如果省略Ins Opt(1)或 InsOpt(1)为NAN,则假设为0。
Ins Opt(2)是⼀个在【0,1】区间的标量,表⽰每个⼦种中重插⼊的⼦代个体在整个⼦种中个体的⽐率。如果 Ins Opt(2)省略或为NAN,则假设 Ins Opt(2)=1.0。
ObⅤCh是⼀个可选列向量,包括 Chrom中个体的⽬标值。对基于适应度的重插⼊, ObjvCh是必需的。
Obj vSel是⼀个可选参数,包含 SelCh中个体的⽬标值。如果⼦代的数量⼤于重插⼊种中的⼦代数
量,则 Objvsel是必需的。这种情况⼦代将按它们的适应度⼤⼩选择插⼊.
7.实⽤函数—bs2rv功能:⼆进制到⼗进制的转换。
调⽤格式:Phen=b2rv( Chrom, Field)
bs2rv根据译码矩阵 Field将⼆进制串矩阵 Chrom转换为实值向量,返回⼗进制的矩阵。
8.实⽤函数—rep功能:矩阵复制。
调⽤格式:MatOut=rep(atIn,REN函数rep完成矩阵Matn的复制,REPN指明复制次数,返回复制后的矩阵 MatOut.REPN包含每个⽅向复制的次数,REPN(1)表⽰纵向复制次数,REPN(2)表⽰⽔平⽅向复制次数
遣传算法⼯具箱应⽤举例
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<MAXGEN
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'])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。