下面是函数实现的代码部分:
clc
clear all
close all
%% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出T,T是标签
%样本数据就是前面问题描述中列出的数据
%epochs是计算时根据输出误差返回调整神经元权值和阀值的次数
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=inputnumhiddennum; % 输入层到隐层的权值个数
w2num=outputnumhiddennum;% 隐层到输出层的权值个数
N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数
%% 定义遗传算法参数
NIND=40; %个体数目
MAXGEN=50; %最大遗传代数
PRECI=10; %变量的二进制位数
GGAP=095; %代沟
px=07; %交叉概率
pm=001; %变异概率
trace=zeros(N+1,MAXGEN); %寻优结果的初始值
FieldD=[repmat(PRECI,1,N);repmat([-05;05],1,N);repmat([1;0;1;1],1,N)]; %区域描述器
Chrom=crtbp(NIND,PRECIN); %初始种群
%% 优化
gen=0; %代计数器
X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换
ObjV=Objfun(X,P,T,hiddennum,P_test,T_test); %计算目标函数值
while gen
如果安装了遗传算法GAOT工具箱,可以直接用ga函数,会自动进行各类 *** 作。如果要自己编程,则选择用轮盘赌原则、交叉用实数方法(ax1+(1-a)x2)、变异也是随机给一个增量(x+(1-a)b)。
你红框框出来的部分是从染色体中提取神经网络权值和阈值,染色体的排序是隐层权值、隐层阈值、输出层权值、输出层阈值。
ga函数的用法:function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)
% Output Arguments:
% x - the best solution found during the course of the run 求得的最优解
% endPop - the final population 最终得到的种群
% bPop - a trace of the best population 最优种群的一个搜索轨迹
% traceInfo - a matrix of best and means of the ga for each generation 每一代种群的最优个体和均值
没有哪种算法更好的说法,因为每种算法都有自己的优势。只能说某种算法在处理某种问题时,效果更好更合适。
神经网络不能说是一种算法,它是一种数学网络结构,各神经元的权值、阈值是用某种训练算法计算出来的。神经网络适用于非线性系统,可用于难以用数学表达式来描述的系统。
遗传算法在全局寻优问题上效果很好,因其收敛速度较快,且不易陷入局部极小点。其中实数编码法适合与神经网络结合,例如GA-BP神经网络。
模糊算法可将一些难以量化的参数模糊处理,并且算法较简单,尤其是适用于专家经验占主要地位的系统,因为添加一条专家经验只需往规则库里添加一条语句即可。用这种算法要注意区间不能划得太宽,否则算法太不精确。
神经网络并行性和自适应性很强,应用领域很广,在任何非线性问题中都可以应用,如控制、信息、预测等各领域都能应用。
蚁群算法最开始应用于TSP问题,获得了成功,后来又广泛应用于各类组合优化问题。但是该算法理论基础较薄弱,算法收敛性都没有得到证明,很多参数的设定也仅靠经验,实际效果也一般,使用中也常常早熟。
遗传算法是比较成熟的算法,它的全局寻优能力很强,能够很快地趋近较优解。主要应用于解决组合优化的NP问题。
这三种算法可以相互融合,例如GA可以优化神经网络初始权值,防止神经网络训练陷入局部极小且加快收敛速度。蚁群算法也可用于训练神经网络,但一定要使用优化后的蚁群算法,如最大-最小蚁群算法和带精英策略。
神经网络的设计要用到遗传算法,遗传算法在神经网络中的应用主要反映在3个方面:网络的学习,网络的结构设计,网络的分析。
1.遗传算法在网络学习中的应用
在神经网络中,遗传算法可用于网络的学习。这时,它在两个方面起作用
(1)学习规则的优化
用遗传算法对神经网络学习规则实现自动优化,从而提高学习速率。
(2)网络权系数的优化
用遗传算法的全局优化及隐含并行性的特点提高权系数优化速度。
2.遗传算法在网络设计中的应用
用遗传算法设计一个优秀的神经网络结构,首先是要解决网络结构的编码问题;然后才能以选择、交叉、变异 *** 作得出最优结构。编码方法主要有下列3种:
(1)直接编码法
这是把神经网络结构直接用二进制串表示,在遗传算法中,“染色体”实质上和神经网络是一种映射关系。通过对“染色体”的优化就实现了对网络的优化。
(2)参数化编码法
参数化编码采用的编码较为抽象,编码包括网络层数、每层神经元数、各层互连方式等信息。一般对进化后的优化“染色体”进行分析,然后产生网络的结构。
(3)繁衍生长法
这种方法不是在“染色体”中直接编码神经网络的结构,而是把一些简单的生长语法规则编码入“染色体”中;然后,由遗传算法对这些生长语法规则不断进行改变,最后生成适合所解的问题的神经网络。这种方法与自然界生物地生长进化相一致。
3.遗传算法在网络分析中的应用
遗传算法可用于分析神经网络。神经网络由于有分布存储等特点,一般难以从其拓扑结构直接理解其功能。遗传算法可对神经网络进行功能分析,性质分析,状态分析。
遗传算法虽然可以在多种领域都有实际应用,并且也展示了它潜力和宽广前景;但是,遗传算法还有大量的问题需要研究,目前也还有各种不足。首先,在变量多,取值范围大或无给定范围时,收敛速度下降;其次,可找到最优解附近,但无法精确确定最扰解位置;最后,遗传算法的参数选择尚未有定量方法。对遗传算法,还需要进一步研究其数学基础理论;还需要在理论上证明它与其它优化技术的优劣及原因;还需研究硬件化的遗传算法;以及遗传算法的通用编程和形式等。
431 遗传BP简介
遗传识别是遗传算法+神经网络的一种新兴的寻优技术,适合于复杂的、叠加的非线性系统的辨识描述。神经网络算法是当前较为成熟的识别分类方法,但网络权值的训练一直存在着缺陷。为此结合具体应用,在对遗传算法进行改进的基础上,本文采用了一种基于遗传学习权值的神经网络识别方法,并取得了较好的效果。
尽管常规遗传算法是稳健的,但针对一个具体问题遗传算法只有和其他方法(或称原有算法)有效地结合在一起,组成一个新的混合算法,才能在实际中得到广泛应用。混合算法既要保持原有算法的长处,又要保持遗传算法的优点,因此常规遗传算法中的适应值函数、编码、遗传算子等必须做适当的修改以适应混合算法的要求。
4311 适应值信息
常规算法中,适应值常被表示为全局极小,用欧氏距离来实现。例如,适应值常被表示为如下形式:
储层特征研究与预测
式中:)Yi为第i 个样本的实际输出,Yi为第i 个样本的期望输出,N 为学习样本数。这种表示法的单点拟合能力较强,能够满足精度要求,但大多数情况下,还要考虑样本整体的一些性质,如方差、连续性等。适应值作为GA中的惟一使用信息,除了体现样本的差异性,还 应当兼顾样本间的相关性。这样就在一定程度上克服了剧烈振荡、网络容错能力差等弱点。因此,我们将灰色系统的灰关联引入进来,在保证样本的遗传 *** 作的同时,加强样本间横向上的联系,从而更有效地选择权值。
设 X0={X0(K),K=1,2,…,n}为母序列,Xi={Xi(K),K=1,2,…,n i=1,2,…,m}为子序列。
则关联系数为:
储层特征研究与预测
关联度为:
储层特征研究与预测
4312 编码问题
二进制位串编码是GA中常见的编码技术。但在实际编程中,采用浮点数直接表示更有利。主要有以下原因:
(1)避免了因网络权值范围不明确,难以进行编码的困难;
(2)取消了编码、译码过程,提高了学习算法的速度;
(3)十进制数字串的引入,在数字串长度不变的情况下,计算精度可以大为提高。例如,用七位二进制数字串来表示(-10,10)之间的数值,则精度最高为:
储层特征研究与预测
用同样长度的十进制数字串来表示(-10,10)之间的数值,去掉符号位和小数点所占用的一位,余下的四位表示小数值,则精度最高可以达到00001。
4313 修改杂交算子
由于编码方式的改变,杂交算子可以设计为具有数值特点的向量的线性组合。通常表示为如下形式:
若有两个个体Sa、Sb杂交,则产生的个体为
储层特征研究与预测
其中u的取值在(0,1),也可根据情况适当缩小取值范围。当u取常数时,杂交算子即为一致杂交,当u随代数变化时,杂交算子则为非一致杂交。
在遗传算法中,随着迭代次数的增加,个体的平均性能逐步提高,个体间的差异缩小。为了防止个体趋向一致,影响算法的收敛性能,本文对u作了如下改变,令
储层特征研究与预测
其中t为当前代数,T为预置最大代数,随着代数的增加,u从1到0变化,完成杂交的渐变过程。
4314 修改变异算子
设个体x=(v1,v2,…,vn),则每个分量以一定概率进行变异,一次变异后的结果为(v1,…,,…,vn),1<=K<=n,的值按下面的随机方式决定:
储层特征研究与预测
式中:LB,UB为第K个变量的左、右邻居,函数Δ(t,y)返回(0,y)上的一个值,并使这个值随着代数t的增大而接近于0,这样选取的函数允许这个算子在算法的开始阶段一致搜索整个空间,而在算法的后阶段进行局部搜索。
储层特征研究与预测
式中:r为[0,1]上的随机数,T为预置的最大代数,t为当前代数,b是决定非一致程度的参数,这里取为05。
4315 成熟前收敛问题
成熟前收敛是指GA不能再产生性能超过父代的后代,尽管尚未达到全局最优解,主要表现形式是连续数代或数十代适应值不发生变化。它与其他方法中的局部极值问题很相似,但又不同,因为它并不一定出现在局部极小点。目前解决这一问题的方法主要有:重新启动法、动态参数编码法、混合法等。为了便于程序表现,我们引进了一个动态记忆窗口W,W用来记录从当前代开始最优目标值保持连续不变的代数。当W达到某个给定的值时,就认为出现了成熟前收敛,这时就令杂交算子和变异算子突然增大,实现基因的重组。当然用这种方法来判别收敛问题是不严格的,对一个算法收敛性能的评价主要应体现在时间复杂性和空间复杂性上。对于像GA这样带有随机搜索性质的具体方法,理论上说,只有当随机数字完全取尽,目标值仍未改变才可认为是成熟前收敛。但在实际中是不可能这样做的。因此可根据随机数的总个数,每次计算出最多取多少个随机参数,来大致估算所需的次数,这个次数就可认为是动态记忆机制W。
432 遗传BP网络结构
遗传算法一般可以通过两种方式应用到神经网络中。一种方式是利用遗传算法训练已知结构的网络,优化网络的连接权;另一种方式是利用遗传算法寻找网络的规模、结构和学习参数。目前这种方法在理论上还不完全成熟,寻优机理、学习效率等有待进一步研究,离实际应用还有一定的距离。
对多层前馈神经网络,目前用得最多的学习算法是BP算法。然而由于BP本身固有的学习机理的限制,从根本上改进BP算法是很困难的。BP的学习过程实际上是连接权的重组优化过程,因此在保持网络结构的前提下,寻找一种能使连接权达到最优组合的学习方法,具有一定的实际意义。
利用GA的优点来克服BP算法收敛慢和易局部收敛的缺陷,同时与BP算法的结合,也解决了单独利用GA往往只能在短时间内寻找到接近最优解的近优解这一问题,引入BP算法的梯度信息将会避免这种现象。GA与BP算法可以有多种不同的组合方法:
先BP后GA:先用BP培训一个预先选定结构的ANN(人工神经网络)直到平均误差不再有意义地减少时为止,然后在此基础上再用GA进行若干代的优化。重复进行这样的搜索,直到误差范围达到满意的要求或者发现搜索不收敛为止。这种组合方法的基本思想是先用BP确定使误差函数取极小值的参数组合在参数空间的位置,再利用GA摆脱掉可能的局部极小。应用这种组合必须事先选定ANN的结构。即只能用它确定ANN的连接权重。显然,如果事先选择的ANN结构不合理或有关的参数(如学习率等)不合适,可能会导致搜索不收敛。
先GA后BP:先用GA反复优化描述ANN模型的参数组合,直到适应函数的平均不再有意义地增加为止。在此基础上再用 BP算法对它们进行优化。这种组合方法的基本思想是先用GA粗选ANN模型,再用 BP算法精细与优化。这种组合方法的优点是通用性好,既可像前一组合方法那样用来优选指定结构下的部分参数,也可用来优选其他的参数,例如 ANN 的结构、学习率等,甚至还可用于优选它们的组合。
图4-4 GABP结构图
上面两种组合GA与 BP的方法是比较基本的两种,以它们为基础可以衍生出多种具体的实现方案。但由于 BP 算法本身也有许多参数需要选定,而且选择方法也无规则可循,因而组合 GA 与BP在一定程度上也使待解决的问题更加复杂化。为此,这里提出了一种改进的GABP方法,即利用 BP网络的非线性分类能力和网络结构来设计分类器,将遗传学习的结果直接送入网络,不再经过BP优化,通过网络结构输出结果。这种改进既体现了系统的非线性,与前面的处理方法相衔接,又通过GA的学习优化了权值,提高了运算速度。该网络为一个三层 BP 网络,结构如图4-4所示。
433 遗传BP计算过程
遗传BP算法的具体步骤:
(1)随机产生N组(-1,1)区间内取值的初始网络权值。
(2)用BP算法对这N组始值分别进行训练,若这N组权值中至少已有一组满足精度要求,则算法结束;否则转入步骤(3)。
(3)分别依据经过训练的这N组较好的权值所对应的上下限确定取值区间,在区间内再随机生产成N组新的权限,连同经过训练的N组权值在一起,构成一个完整的基因群体,共2N组权值。
(4)从这2N组权值进行选择、交叉、变异等遗传 *** 作。
(5)从经过遗传 *** 作的这2N组权值中选出N组较好的,回复到步骤(2)。
图4-5 改进的 GABP计算流程图
GABP的计算过程图如图4-5所示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)