首页 MATLAB_智能算法30个案例分析

MATLAB_智能算法30个案例分析

举报
开通vip

MATLAB_智能算法30个案例分析MATLAB_智能算法30个案例分析 MATLAB 智能算法30个案例分析 第 1 章 1、案例背景 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物 竞天择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代 的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标 的染色体。 在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各 个位置对应基因的取值。基因组成的串就是染色体,或者叫...

MATLAB_智能算法30个案例分析
MATLAB_智能算法30个 案例 全员育人导师制案例信息技术应用案例心得信息技术教学案例综合实践活动案例我余额宝案例 分析 MATLAB 智能算法30个案例分析 第 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<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?]) 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<MAXGEN 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 模型建立 算法流程图如下: 1.3 仿真结果 非线性遗传算法寻优结果如下: 主函数代码如下: %% 清空环境 clc clear %% 遗传算法参数 maxgen=30; %进化代数 sizepop=100; %种群规模 pcross=[0.6]; %交叉概率 pmutation=[0.01]; %变异概率 lenchrom=[1 1 1 1 1]; %变量字串长度 普通遗传算法寻优结果如下: bound=[0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi]; %变量范围 %% 个体初始化 individuals=struct(„fitness?,zeros(1,sizepop), „chrom?,[]); %种群结构体 avgfitness=[]; %种群平均适应度 bestfitness=[]; %种群最佳适应度 bestchrom=[]; %适应度最好染色体 % 初始化种群 for i=1:sizepop individuals.chrom(i,:)=Code(lenchrom,bound); %随机产生个体 x=individuals.chrom(i,:); individuals.fitness(i)=fun(x); %个体适应度 end %找最好的染色体 [bestfitness bestindex]=min(individuals.fitness); bestchrom=individuals.chrom(bestindex,:); %最好的染色体 avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度 % 记录每一代进化中最好的适应度和平均适应度 trace=[avgfitness bestfitness]; %% 进化开始 for i=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,[i maxgen],bound); % 计算适应度 for j=1:sizepop x=individuals.chrom(j,:); individuals.fitness(j)=fun(x); end %找到最小和最大适应度的染色体及它们在种群中的位置 [newbestfitness,newbestindex]=min(individuals.fitness); [worestfitness,worestindex]=max(individuals.fitness); % 代替上一次进化中最好的染色体 if bestfitness>newbestfitness bestfitness=newbestfitness; bestchrom=individuals.chrom(newbestindex,:); end individuals.chrom(worestindex,:)=bestchrom; individuals.fitness(worestindex)=bestfitness; avgfitness=sum(individuals.fitness)/sizepop; trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度 end %进化结束 %% 结果显示 [r c]=size(trace); plot([1:r]?,trace(:,1),?r-?,[1:r]?,trace(:,2),?b--?); title([„函数值曲线 „ „终止代数,? num2str(maxgen)]); xlabel(„进化代数?);ylabel(„函数值?); legend(„各代平均值?,?各代最佳值?); disp(„函数值 变量?); % 窗口显示 disp([bestfitness x]); 第 3 章 基于遗传算法的BP神经网络优化算法 1、案例背景 BP网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP算法是Rumelhart等人在1986年提出来的。由于它的结构简单,可调整的参数多,训练算法也多,而且可操作性好,BP神经网络获得了非常广泛的应用。据统计,有80%,90%的神经网络模型都是采用了BP网络或者是它的变形。BP网络是前向网络的核心部分,是神经网络中最精华、最完美的部分。BP神经网络虽然是人工神经网络中应用最广泛的算法,但是也存在着一些缺陷,例如: ?、学习收敛速度太慢; ?、不能保证收敛到全局最小点; ?、网络结构不易确定。 另外,网络结构、初始连接权值和阈值的选择对网络训练的影响很大,但是又无法准确获得,针对这些特点可以采用遗传算法对神经网络进行优化。 本节以某型号拖拉机的齿轮箱为工程背景,介绍使用基于遗传算法的BP神经网络进行齿轮箱故障的诊断。 2、案例目录: 第3章 基于遗传算法的BP神经网络优化算法 3.1 理论基础 3.1.1 BP神经网络概述 3.1.2 遗传算法概述 3.2 案例背景 3.2.1 问题描述 3.2.2 解决思路及步骤 1. 算法流程 2. 神经网络算法实现 3. 遗传算法实现 3.3 MATLAB程序实现 3.3.1 神经网络算法 3.3.2 遗传算法主函数 3.3.3 比较使用遗传算法前后的差别 3.3.4 结果分析 3.4 延伸阅读 3.5 参考文献 3、主程序: clc clear all close all %% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出T %样本数据就是前 面问题描述中列出的数据 load data % 初始隐层神经元个数 hiddennum=31; % 输入向量的最大值和最小值 threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1]; inputnum=size(P,1); % 输入层神经元个数 outputnum=size(T,1); % 输出层神经元个数 w1num=inputnum*hiddennum; % 输入层到隐层的权值个数 w2num=outputnum*hiddennum;% 隐层到输出层的权值个数 N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数 %% 定义遗传算法参数 NIND=40; %个体数目 MAXGEN=50; %最大遗传代数 PRECI=10; %变量的二进制位数 GGAP=0.95; %代沟 px=0.7; %交叉概率 pm=0.01; %变异概率 trace=zeros(N+1,MAXGEN); %寻优结果的初始值 FieldD=[repmat(PRECI,1,N);repmat([-0.5;0.5],1,N);repmat([1;0;1;1],1,N)]; %区域描述器 Chrom=crtbp(NIND,PRECI*N); %初始种群 %% 优化 gen=0; %代计数器 X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换 ObjV=Objfun(X,P,T,hiddennum,P_test,T_test); %计算目标函数值 while gen<MAXGEN fprintf(„%d\n?,gen) FitnV=ranking(ObjV); %分配适应度值 SelCh=select(„sus?,Chrom,FitnV,GGAP); %选择 SelCh=recombin(„xovsp?,SelCh,px); %重组 SelCh=mut(SelCh,pm); %变异 X=bs2rv(SelCh,FieldD); %子代个体的十进制转换 ObjVSel=Objfun(X,P,T,hiddennum,P_test,T_test); %计算子代的目标函数值 [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群 X=bs2rv(Chrom,FieldD); gen=gen+1; %代计数器增加 %获取每代的最优解及其序号,Y为最优解,I为个体的序号 [Y,I]=min(ObjV); trace(1:N,gen)=X(I,:); %记下每代的最优值 trace(end,gen)=Y; %记下每代的最优值 end %% 画进化图 figure(1); plot(1:MAXGEN,trace(end,:)); grid on xlabel(„遗传代数?) ylabel(„误差的变化?) title(„进化过程?) bestX=trace(1:end-1,end); bestErr=trace(end,end); fprintf([„最优初始权值和阈值:\nX=„,num2str(bestX?),?\n最小误差err=„,num2str(bestErr),?\n?]) 第 4 章 基于遗传算法的TSP算法 1、案例背景 TSP (旅行商问题—Traveling Salesman Problem),是典型的NP完全问题,即其最坏情况下的时间复杂性随着问题规模的增大按指数方式增长,到目前为止不能找到一个多项式时间的有效算法。遗传算法是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。实践证明, 遗传算法对于解决TSP问题等组合优化问题具有较好的寻优性能。 2、案例目录: 第4章 基于遗传算法的TSP算法 4.1 理论基础 4.1.1 遗传算法概述 4.1.2 TSP问题介绍 4.2 案例背景 4.2.1 问题描述 4.2.2解决思路及步骤 4.2.2.1 算法流程 4.2.2.2 遗传算法实现 1. 编码 2. 种群初始化 3. 适应度函数 4. 选择操作 5. 交叉操作 6. 变异操作 7. 进化逆转操作 4.3 MATLAB程序实现 4.3.1 种群初始化 4.3.2 适应度函数 4.3.3 选择操作 4.3.4 交叉操作 4.3.5 变异操作 4.3.6 进化逆转操作 4.3.7 画路线轨迹图 4.3.8 遗传算法主函数 4.3.9 结果分析 4.4 延伸阅读 4.4.1 应用扩展 4.4.2 遗传算法的改进 4.4.3 算法的局限性 4.5 参考文献 3、案例实例及结果: 本案例以14个城市为例,假定14个城市的位置坐标为: 表4.1 14个城市的位置坐标 城市编号 1 2 3 4 5 6 7 8 X坐标 16.47 16.47 20.09 22.39 25.23 22 20.47 17.2 Y坐标 96.1 94.44 92.54 93.37 97.24 96.05 97.02 96.29 9 10 11 12 13 14 16.3 14.05 16.53 21.52 19.41 20.09 97.38 98.12 97.38 95.59 97.13 92.55 从某个城市出发访问每个城市一次且仅一次, 最后回到出发城市,如何安排才使其所走路线最短。 结果: 优化前的一个随机路线轨迹图 图4.1 随机路线图 随机路线为: 11—>7—>10—>4—>12—>9—>14—>8—>13—>5—>2—>3—>6—>1—>11 总距离:71.1144 优化后的路线图: 图4.2 最优解路线图 最优解路线: 5—>4—>3—>14—>2—>1—>10—>9—>11—>8—>13—>7—>12—>6—>5 总距离:29.3405 优化迭代过程: 图4.3 遗传算法进化过程图 4、主程序: clear clc close all load CityPosition1;%个城市坐标位置 NIND=100; %种群大小 MAXGEN=200; Pc=0.9; %交叉概率 Pm=0.05; %变异概率 GGAP=0.9; %代沟(Generation gap) D=Distanse(X); %生成距离矩阵 N=size(D,1); %(34*34) %% 初始化种群 Chrom=InitPop(NIND,N); %% 在二维图上画出所有坐标点 % figure % plot(X(:,1),X(:,2),?o?); %% 画出随机解的路线图 DrawPath(Chrom(1,:),X) pause(0.0001) %% 输出随机解的路线和总距离 disp(„初始种群中的一个随机值:?) OutputPath(Chrom(1,:)); Rlength=PathLength(D,Chrom(1,:)); disp([„总距离:?,num2str(Rlength)]); disp(„~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~?) % % 优化 gen=0; figure; hold on;box on xlim([0,MAXGEN]) title(„优化过程?) xlabel(„代数?) ylabel(„最优值?) ObjV=PathLength(D,Chrom); %计算路线长度 preObjV=min(ObjV); while gen<MAXGEN %% 计算适应度 ObjV=PathLength(D,Chrom); %计算路线长度 % fprintf(„%d %1.10f\n?,gen,min(ObjV)) line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001) preObjV=min(ObjV); FitnV=Fitness(ObjV); %% 选择 SelCh=Select(Chrom,FitnV,GGAP); %% 交叉操作 SelCh=Recombin(SelCh,Pc); %% 变异 SelCh=Mutate(SelCh,Pm); %% 逆转操作 SelCh=Reverse(SelCh,D); %% 重插入子代的新种群 Chrom=Reins(Chrom,SelCh,ObjV); %% 更新迭代次数 gen=gen+1 ; end %% 画出最优解的路线图 ObjV=PathLength(D,Chrom); %计算路线长度 [minObjV,minInd]=min(ObjV); DrawPath(Chrom(minInd(1),:),X) %% 输出最优解的路线和总距离 disp(„最优解:?) p=OutputPath(Chrom(minInd(1),:)); disp([„总距离:?,num2str(ObjV(minInd(1)))]); disp(„-------------------------------------------------------------?) 第 5章 基于遗传算法的LQR控制器优化设计 1、案例背景 LQR控制在工程中得到了广泛的应用,对于LQR最优控制,其最优性完全取决于加权矩阵的选择,然而该加权矩阵如何选择并没有解析方法,只能定性地去选择矩阵参数,所以这样的“最优”控制事实上完全是认为的。如果选择不当,虽然可以求出最优解,但这样的“最优解”没有任何意义。另一方面,加权矩阵的选择依赖于设计者的经验,需要设计者根据系统输出逐步调整加权矩阵,直到获得满意的输出响应量为止,这样不仅费时,而且无法保证获得最优的权重矩阵,因此获得的最优控制反馈系数不能保证使系统达到最优。遗传算法(Genetic Algorithm,GA)是模仿自然界生物进化机制发展起来的全局搜索优化方法,它在迭代过程中使用适者生存的原则,采用交叉、变异等操作使得种群朝着最优的方向进化,最终获得最优解。鉴于LQR 控制方法权重矩阵确定困难的问题,本案例以汽车主动悬架作为被控对象,将遗传算法应用于LQR控制器的设计中,利用遗传算法的全局搜索能力,以主动悬架的性能指标作为目标函数对加权矩阵进行优化设计,以提高LQR的设计效率和性能。 2、案例目录:
本文档为【MATLAB_智能算法30个案例分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_633423
暂无简介~
格式:doc
大小:46KB
软件:Word
页数:22
分类:工学
上传时间:2017-09-18
浏览量:129