手机版
您的当前位置: 明翰范文网 > 范文大全 > 公文范文 > 2023MATLAB智能算法30个案例分析115(完整文档)

2023MATLAB智能算法30个案例分析115(完整文档)

来源:网友投稿 时间:2022-11-10 08:55:03 推荐访问: matching Maths MATLAB智能算法30个案例分析115

下面是小编为大家整理的2023MATLAB智能算法30个案例分析115(完整文档,供大家参考。

2023MATLAB智能算法30个案例分析115(完整文档)

MATLAB 智能算法 30 个案例分析 115 第 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",...

明翰范文网 www.tealighting.com

Copyright © 2016-2024 . 明翰范文网 版权所有

Powered by 明翰范文网 © All Rights Reserved. 备案号:浙ICP备16031184号-2

Top