该方法具有学习速度快、泛化性能好等优点。
同时,在介绍ELM算法的基础上,本章以实例的形式将该算法分别应用于回归拟合(第25章——基于近红外光谱的汽油辛烷值预测)和分类(第26章——鸢尾花种类识别)中。
第 1 章
1、案例背景
遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。
在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。基因组成的串就是染色体,或者叫基因型个体( Individuals) 。一定数量的个体组成了群体(Population)。群体中个体的数目称为群体大小(Population Size),也叫群体规模。而各个个体对环境的适应程度叫做适应度( Fitness) 。
2、案例目录:
1.1 理论基础
1.1.1 遗传算法概述 1. 编码
2. 初始群体的生成 3. 适应度评估 4. 选择 5. 交叉 6. 变异
1.1.2 设菲尔德遗传算法工具箱 1. 工具箱简介 2. 工具箱添加 1.2 案例背景 1.2.1 问题描述
1. 简单一元函数优化 2. 多元函数优化
1.2.2 解决思路及步骤 1.3 MATLAB程序实现 1.3.1 工具箱结构
1.3.2 遗传算法中常用函数 1. 创建种群函数—crtbp 2. 适应度计算函数—ranking 3. 选择函数—select
4. 交叉算子函数—recombin 5. 变异算子函数—mut
6. 选择函数—reins 7. 实用函数—bs2rv 8. 实用函数—rep
1.3.3 遗传算法工具箱应用举例 1. 简单一元函数优化 2. 多元函数优化 1.4 延伸阅读 1.5 参考文献
3、主程序:
1. 简单一元函数优化: 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. 多元函数优化 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']) 第 2 章 基于遗传算法和非线性规划的函数寻优算法 1.1案例背景 1.1.1 非线性规划方法 非线性规划是20世纪50年代才开始形成的一门新兴学科。1951年H.W.库恩和A.W.塔克发表的关于最优性条件(后来称为库恩.塔克条件)的论文是非线性规划正式诞生的一个重要标志。 非线性规划研究一个n元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。非线性规划的一个重要理论是1951年Kuhn-Tucker最优条件(简称KT条件)的建立。此后的50年代主要是对梯度法和牛顿法的研究。以Davidon(1959),Fletcher和Powell(1963)提出的DFP方法为起点,60年代是研究拟牛顿方法活跃时期,同时对共轭梯度法也有较好的研究。在1970年由Broyden,Fletcher、Goldfarb 和Shanno从不同的角度共同提出的BFGS方法是目前为止最有效的拟牛顿方法。由于Broyden,Dennis 和More的工作使得拟牛顿方法的理论变得很完善。 70年代是非线性规划飞速发展时期, 约束变尺度(SQP)方法(Han和Powell为代表)和Lagrange乘子法(代表人物是Powell 和Hestenes)是这一时期主要研究成果.计算机的飞速发展使非线性规划的研究如虎添翼。80年**始研究信赖域法、稀疏拟牛顿法、大规模问题的方法和并行计算,90年代研究解非线性规划问题的内点法和有限储存法。可以毫不夸张的说,这半个世纪是最优化发展的黄金时期。 1.1.2非线性规划函数 fmincon函数是Matlab最优化工具箱中用来求解非线性规划问题的重要函数,它从一个预估值出发,搜索约束条件下非线性多元函数的最小值。 1.1.3 案例 1.2 模型建立 算法流程图如下: