您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > MATLAB_智能算法案例分析
MATLAB智能算法30个案例分析第1章1、案例背景遗传算法(GeneticAlgorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。基因组成的串就是染色体,或者叫基因型个体(Individuals)。一定数量的个体组成了群体(Population)。群体中个体的数目称为群体大小(PopulationSize),也叫群体规模。而各个个体对环境的适应程度叫做适应度(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.3MATLAB程序实现1.3.1工具箱结构1.3.2遗传算法中常用函数1.创建种群函数—crtbp2.适应度计算函数—ranking3.选择函数—select4.交叉算子函数—recombin5.变异算子函数—mut6.选择函数—reins7.实用函数—bs2rv8.实用函数—rep1.3.3遗传算法工具箱应用举例1.简单一元函数优化2.多元函数优化1.4延伸阅读1.5参考文献3、主程序:1.简单一元函数优化:clcclearallcloseall%%画出函数图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;%计算目标函数值whilegenMAXGENFitnV=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;%记下每代的最优值endplot(trace(1,:),trace(2,:),'bo');%画出每代的最优点gridon;plot(X,ObjV,'b*');%画出最后一代的种群holdoff%%画进化图figure(2);plot(1:MAXGEN,trace(2,:));gridonxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])多元函数优化clcclearallcloseall%%画出函数图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);%计算目标函数值whilegenMAXGENFitnV=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;%记下每代的最优值endplot3(trace(1,:),trace(2,:),trace(3,:),'bo');%画出每代的最优点gridon;plot3(XY(:,1),XY(:,2),ObjV,'bo');%画出最后一代的种群holdoff%%画进化图figure(2);plot(1:MAXGEN,trace(3,:));gridonxlabel('遗传代数')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模型建立算法流程图如下:1.3仿真结果非线性遗传算法寻优结果如下:普通遗传算法寻优结果如下:主函数代码如下:%%清空环境clcclear%%遗传算法参数maxgen=30;%进化代数sizepop=100;%种群规模pcross=[0.6];%交叉概率pmutation=[0.01];%变异概率lenchrom=[11111];%变量字串长度bound=[00.9*pi;00.9*pi;00.9*pi;00.9*pi;00.9*pi];%变量范围%%个体初始化individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);%种群结构体avgfitness=[];%种群平均适应度bestfitness=[];%种群最佳适应度bestchrom=[];%适应度最好染色体%初始化种群fori=1:sizepopindividuals.chrom(i,:)=Code(lenchrom,bound);%随机产生个体x=individuals.chrom(i,:);individuals.fitness(i)=fun(x);%个体适应度end%找最好的染色体[bestfitnessbestindex]=min(individuals.fitness);bestchrom=individuals.chrom(bestindex,:);%最好的染色体avgfitness=sum(individuals.fitness)/sizepop;%染色体的平均适应度%记录每一代进化中最好的适应度和平均适应度trace=[avgfitnessbestfitness];%%进化开始fori=1:maxgen%选择操作individuals=Select(individuals,sizepop);avgfitness=sum(individuals.fitness)/sizepop;%交叉操作individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);%变异操作individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[imaxgen],bound);%计算适应度forj=1:sizepopx=individuals.chrom(j,:);individuals.fitness(j)=fun(x);end%找到最小和最大适应度的染色体及它们在种群中的位置[newbestfitness,newbestindex]=min(individuals.fitness);[worestfitness,worestindex]=max(individuals.fitness);%代替上一次进化中最好
本文标题:MATLAB_智能算法案例分析
链接地址:https://www.777doc.com/doc-2886993 .html