仿真结果
非线性遗传算法寻优结果如下:
普通遗传算法寻优结果如下:
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 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); %计算子代的目标函数值