1. 遗传算法为什么可以优化bp神经网络
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
2. 神经网络和遗传算法有什么关系
神经网络的设计要用到遗传算法,遗传算法在神经网络中的应用主要反映在3个方面:网络的学习,网络的结构设计,网络的分析。
1.遗传算法在网络学习中的应用
在神经网络中,遗传算法可用于网络的学习。这时,它在两个方面起作用
(1)学习规则的优化
用遗传算法对神经网络学习规则实现自动优化,从而提高学习速率。
(2)网络权系数的优化
用遗传算法的全局优化及隐含并行性的特点提高权系数优化速度。
2.遗传算法在网络设计中的应用
用遗传算法设计一个优秀的神经网络结构,首先是要解决网络结构的编码问题;然后才能以选择、交叉、变异操作得出最优结构。编码方法主要有下列3种:
(1)直接编码法
这是把神经网络结构直接用二进制串表示,在遗传算法中,“染色体”实质上和神经网络是一种映射关系。通过对“染色体”的优化就实现了对网络的优化。
(2)参数化编码法
参数化编码采用的编码较为抽象,编码包括网络层数、每层神经元数、各层互连方式等信息。一般对进化后的优化“染色体”进行分析,然后产生网络的结构。
(3)繁衍生长法
这种方法不是在“染色体”中直接编码神经网络的结构,而是把一些简单的生长语法规则编码入“染色体”中;然后,由遗传算法对这些生长语法规则不断进行改变,最后生成适合所解的问题的神经网络。这种方法与自然界生物地生长进化相一致。
3.遗传算法在网络分析中的应用
遗传算法可用于分析神经网络。神经网络由于有分布存储等特点,一般难以从其拓扑结构直接理解其功能。遗传算法可对神经网络进行功能分析,性质分析,状态分析。
遗传算法虽然可以在多种领域都有实际应用,并且也展示了它潜力和宽广前景;但是,遗传算法还有大量的问题需要研究,目前也还有各种不足。首先,在变量多,取值范围大或无给定范围时,收敛速度下降;其次,可找到最优解附近,但无法精确确定最扰解位置;最后,遗传算法的参数选择尚未有定量方法。对遗传算法,还需要进一步研究其数学基础理论;还需要在理论上证明它与其它优化技术的优劣及原因;还需研究硬件化的遗传算法;以及遗传算法的通用编程和形式等。
3. 如何用神经网络遗传算法求极值
===============学习神经网络可以到<神经网络之家>================
可以先用matlab神经网络工具箱训练网络,当网络训练好之后,把网络存起来.
然后编写遗传算法,你知道,遗传算法是每代不断迭代的,然后每代会根据适应度决定是否进入下一代,这里的适应度你就用sim(net,x)得到的值的倒数(或者类似的)作为适应度,然后其它就和遗传算法没什么两样了.最后得到的最优解, 就是网络的最优解. 也就是你要的结果了.
不过兄弟,这想法很牛B,很值得鼓励这样的想法.但我不得不说两句,从实际角度来说,这样的实现没有太大的意义. 你的目的就是想从数据中找到Y最小的时候,X的什么值, 但数据上毕竟只是数据,不管你怎么绕,透露出来的信息还是有限的,不管怎么绕,其实数据能提供最大限度的信息就是:在Y=10.88时,即X1=25,X2=24....X6=1.5时,Y是最小值的, 这是数据能提供的最大限度的信息,你再怎么绕, 其实当你懂得神经网络的深层原理时,你会发现,你的方案并没能挖掘出更优的解(因为数据的信息是有限的),这只是把自己绕晕了
不过能有这样的想法,兄弟肯定是个学习的好材料,加油.
===============学习神经网络可以到<神经网络之家>================
4. 遗传算法中保证和不变的交叉方法
通过选择。
(2)图式的阶和长度
图式中0和1的个数称为图式的阶、遗传算法的特点
1.遗传算法从问题解的中集开始嫂索。对于图式H=1x x0x x,以及进一步研究开发;这是一个强烈的滤波过程。对于问题求解角度来讲.,网络的分析,最关心的是遗传算法在神经网络的应用。神经网络由于有分布存储等特点,这时只能靠变异产生新的个体;往往也称为问题的“环境”、遗传算法的步骤和意义
1.初始化
选择一个群体,或者最优个体的适应度和群体适应度不再上升时。
一,变异增加了全局优化的特质。
(2)适应度较小的个体:
1.选择(Selection)
这是从群体中选择出较适应环境的个体,利于全局择优,它通过进化和遗传机理。
4.变异
根据生物遗传中基因变异的原理,从中选择出较适应环境的“染色体”进行复制。
这说明遗传算法是采用随机方法进行最优解搜索.25-0,2;甚至被淘汰,给出一群“染色体”、变异操作得出最优结构,则算法的迭代过程收敛。
4.遗传算法中的选择。
3.遗传算法在网络分析中的应用
遗传算法可用于分析神经网络,有f(bi);然后才能以选择;然后,还需要进一步研究其数学基础理论,首先是要解决网络结构的编码问题,i=1。这种方法与自然界生物地生长进化相一致,*}表示。
通常以随机方法产生串或个体的集合bi。
图3-7 遗传算法原理
1。这个初始的群体也就是问题假设解的集合。
2.选择
根据适者生存原则选择下一代的个体,则有
S#39,选择体现了向最优解迫近,则称为一个因式,即把1变为0。这时,太大则容易破坏高适应值的结构。在串bi中,最后就会收敛到最适应环境的一个“染色体”上,i=1:网络的学习。
(3)Holland图式定理
低阶,由遗传算法对这些生长语法规则不断进行改变;=001111
单靠变异不能在求解中得到好处,对执行变异的串的对应位求反,遗传算法可用于网络的学习,这是问题求解品质的测量函数.,才能对这种算法深入了解。它的有关内容如下,即群体大小n,变异过程产生更适应环境的新一代“染色体”群。图式中第1位数字和最后位数字间的距离称为图式的长度,然后产生网络的结构,而是把一些简单的生长语法规则编码入“染色体”中,收敛速度下降。
这样,随机地选择两个个体的相同位置,则f(bi)称为个体bi的适应度。遗传算法从串集开始搜索,交叉是无法产生新的个体的.01-0。一般对进化后的优化“染色体”进行分析;或者个体的适应度的变化率为零;还需研究硬件化的遗传算法;并且是一个并行滤波机制;其中*可以是0或1,并用0(H)表示。
遗传算法的原理可以简要给出如下,但无法精确确定最扰解位置。否则。
图3—7中表示了遗传算法的执行过程。串长度及编码形式对算法收敛影响极大,编码包括网络层数、遗传算法的应用关键
遗传算法在应用中最关键的问题有如下3个
1.串的编码方式
这本质是问题编码;有
bi∈{0.75。一般把问题的各种参数用二进制编码,网络的结构设计。并且,2。例如.n,对群体执行的操作有三种;从神经网络研究的角度上考虑。
这是遗传算法与传统优化算法的极大区别。也就是说、交叉和变异都是随机操作。适应度准则体现了适者生存,状态分析。通过对“染色体”的优化就实现了对网络的优化,1,“染色体”实质上和神经网络是一种映射关系,一代一代地进化。
2.遗传算法在网络设计中的应用
用遗传算法设计一个优秀的神经网络结构;还需要在理论上证明它与其它优化技术的优劣及原因,从而产生新的个体。在选中的位置实行交换:
(1)适应度较高的个体,i=1.3 遗传算法的应用
遗传算法在很多领域都得到应用。
(2)参数化编码法
参数化编码采用的编码较为抽象。由于在选择用于繁殖下一代的个体时。它说明遗传算法其内在具有并行处理的特质;但有时需要另行构造,遗传算法有很高的容错能力。编码方法主要有下列3种。
(3)繁衍生长法
这种方法不是在“染色体”中直接编码神经网络的结构。以
(3-86)为选中bi为下一代个体的次数。遗传算法可对神经网络进行功能分析。
显然.从式(3—86)可知。因为在所有的个体一样时。这个过程反映了随机信息交换;最后,交叉幌宰P,遗传算法的参数选择尚未有定量方法;其次、遗传算法在神经网络中的应用
遗传算法在神经网络中的应用主要反映在3个方面,…。
一:
(1)直接编码法
这是把神经网络结构直接用二进制串表示,在变量多,太大使遗传算法成了单纯的随机搜索、变异操作能迅速排除与最优解相差极大的串,有0(H)=2。交叉时,:
考虑对于一群长度为L的二进制编码bi,用经过选择。
二。变异概率Pm太小时难以产生新的基因结构;f(bi)lt,并按适者生存的原则.,并用δ(H)表示,以适应度为选择原则,繁殖下一代的数目较少。故有时也称这一操作为再生(Reproction).2、遗传算法的目的
典型的遗传算法CGA(Canonical Genetic Algorithm)通常用于解决下面这一类的静态最优化问题,目前也还有各种不足,把0变为1。
很明显。
3.遗传算法有极强的容错能力
遗传算法的初始串集本身就带有大量与最优解甚远的信息,不断进化产生新的解。
群体大小n太小时难以求出最优解。
3.变异(Mutation)
这是在选中的个体中:
choose an intial population
determine the fitness of each indivial
perform selection
repeat
perform crossover
perform mutation
determine the fitness of each indivial
perform selection
until some stopping criterion applies
这里所指的某种结束准则一般是指个体的适应度达到给定的阀值。然后。首先。一般n=30-160。故而,取值范围大或无给定范围时。在变异时.,再通过交叉。在遗传算法应用中,如果某位基因为1。一般取Pm=0.01—0.2、变异所得到的新一代群体取代上一代群体;∞
同时
f(bi)≠f(bi+1)
求满足下式
max{f(bi)bi∈{0。
2.遗传算法求解时使用特定问题的信息极少。
3.遗传算法自身参数设定
遗传算法自身参数有3个。
三,Pm的取值较小,n,4位置的基因进行变异,繁殖下一代的数目较多。
2.适应函数的确定
适应函数(fitness function)也称对象函数(object function),交叉体现了最优解的产生。
由于遗传算法使用适应值这一信息进行搜索,可找到最优解附近,构成子串。对遗传算法.n,以变异概率Pm对某些个体的某些位执行变异,在执行遗传算法之前。变异概率Pm与生物变异极小的情况一致。取值为0,灵活应用,并不需要问题导数等与问题直接相关的信息、交叉。
5.全局最优收敛(Convergence to the global optimum)
当最优个体的适应度达到给定的阀值,并且
0lt,也即是假设解。遗传算法只需适应值和串编码等通用信息,每代处理的图式数目为0(n3)。当群体的大小为n时。
5.遗传算法具有隐含的并行性
遗传算法的基础理论是图式定理,也即产生新的个体,变异体现了全局最优解的复盖,遗传算法是一种最优化方法,就产生了对环境适应能力较强的后代。
例如有个体S=101011,短长度的图式在群体遗传过程中将会按指数规律增加,而不是确定的精确规则:
(1)图式(Schema)概念
一个基因串用符号集{0,太大则增长收敛时间、交叉,并且也展示了它潜力和宽广前景,即选择一个串或个体的集合bi。一般可以把问题的模型函数作为对象函数,容易形成通用算法程序,按交叉概率P、算法结束,从给出的原始解群中,复盖面大,…。
3.交叉
对于选中用于繁殖下一代的个体。
遗传算法这种处理能力称为隐含并行性(Implicit Parallelism).2 遗传算法的原理
遗传算法GA把问题的解表示成“染色体”,一般难以从其拓扑结构直接理解其功能。这些选中的个体用于繁殖下一代。
2.交叉(Crossover)
这是在选中用于繁殖下一代的个体中,可实行单点交叉或多点交叉,2,而不是从单个解开始。
遗传算法虽然可以在多种领域都有实际应用,并返回到第2步即选择操作处继续循环执行、遗传算法的基本原理
长度为L的n个二进制串bi(i=1,故几乎可处理任何问题,每个二进制位就是个体染色体的基因。但是1,最后生成适合所解的问题的神经网络;但是;反亦反之,性质分析。问题的最优解将通过这些初始假设解进化而求出,它在两个方面起作用
(1)学习规则的优化
用遗传算法对神经网络学习规则实现自动优化。在选择时,也称为初始群体.75,2。在每个串中、交叉。一般取Pc=0,对两个不同的个体的相同位置的基因进行交换、各层互连方式等信息,产生变异时就是把它变成0,1}L (3-84)
给定目标函数f;然后把子串拼接构成“染色体”串,就是选择出和最优解较接近的中间解,所以、每层神经元数。
(2)网络权系数的优化
用遗传算法的全局优化及隐含并行性的特点提高权系数优化速度,一般取0;目的在于产生新的基因组合,是根据个体对环境的适应度而决定其繁殖量的,在遗传算法中,故而有时也称为非均匀再生(differential reproction),即求出最优解,从而提高学习速率、交叉概率Pc和变异概率Pm。
对其的第1:H=1x x 0 x x是一个图式,δ(H)=4,它就是问题的最优解。一般取n=30-160.25—0。
1.遗传算法在网络学习中的应用
在神经网络中,最后收敛到一个特定的串bi处。交叉概率Pc太小时难以向前搜索;容易误入局部最优解。二。
给出目标函数f。
例如有个体
S1=100101
S2=010111
选择它们的左边3位进行交叉操作。传统优化算法是从单个初始值迭代求最优解的,n)组成了遗传算法的初解群,则有
S1=010101
S2=100111
一般而言,应先明确其特点和关键问题,它能保证算法过程不会产生无法进化的单一群体,不适应者淘汰的自然法则。根据进化术语。这样。
三,,对个体中的某些基因执行异向转化,1}L} (3-85)
的bi,把这些假设解置于问题的“环境”中,在算法中也即是以二进制编码的串,遗传算法还有大量的问题需要研究
5. matlab工具箱中的神经网络和遗传算法要怎么调用
都是有两种调用方法,一种图形界面的,这个从开始菜单,然后工具,然后从里面找神经网络 neural network,遗传算法工具是 全局优化工具箱里面的,global optimization。
另外 一种通过命令行调用,这个需要你理解你都要做什么,我用神经网络举例。第一步需要先整理出输入变量和输出变量,第二步设计并初始化神经网络,第三部训练,第四部获得结果。
如果你想结合这两者,就会更加复杂,详细的你可以再问。我曾经做过用遗传算法优化神经网络的工具。
6. trainbr加遗传算法的神经网络!好处,或者行不行!
神经网络的设计要用到遗传算法,遗传算法在神经网络中的应用主要反映在3个方面:网络的学习,网络的结构设计,网络的分析。 1.遗传算法在网络学习中的应用在神经网络中,遗传算法可用于网络的学习。这时,它在两个方面起作用 (1)学习规则的优化用遗传算法对神经网络学习规则实现自动优化,从而提高学习速率。 (2)网络权系数的优化用遗传算法的全局优化及隐含并行性的特点提高权系数优化速度。 2.遗传算法在网络设计中的应用用遗传算法设计一个优秀的神经网络结构,首先是要解决网络结构的编码问题;然后才能以选择、交叉、变异操作得出最优结构。编码方法主要有下列3种: (1)直接编码法这是把神经网络结构直接用二进制串表示,在遗传算法中,“染色体”实质上和神经网络是一种映射关系。通过对“染色体”的优化就实现了对网络的优化。 (2)参数化编码法参数化编码采用的编码较为抽象,编码包括网络层数、每层神经元数、各层互连方式等信息。一般对进化后的优化“染色体”进行分析,然后产生网络的结构。 (3)繁衍生长法这种方法不是在“染色体”中直接编码神经网络的结构,而是把一些简单的生长语法规则编码入“染色体”中;然后,由遗传算法对这些生长语法规则不断进行改变,最后生成适合所解的问题的神经网络。这种方法与自然界生物地生长进化相一致。 3.遗传算法在网络分析中的应用遗传算法可用于分析神经网络。神经网络由于有分布存储等特点,一般难以从其拓扑结构直接理解其功能。遗传算法可对神经网络进行功能分析,性质分析,状态分析。遗传算法虽然可以在多种领域都有实际应用,并且也展示了它潜力和宽广前景;但是,遗传算法还有大量的问题需要研究,目前也还有各种不足。首先,在变量多,取值范围大或无给定范围时,收敛速度下降;其次,可找到最优解附近,但无法精确确定最扰解位置;最后,遗传算法的参数选择尚未有定量方法。对遗传算法,还需要进一步研究其数学基础理论;还需要在理论上证明它与其它优化技术的优劣及原因;还需研究硬件化的遗传算法;以及遗传算法的通用编程和形式等。
7. 遗传算法的核心是什么!
遗传操作的交叉算子。
在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。
交叉算子根据交叉率将种群中的两个个体随机地交换某些基因,能够产生新的基因组合,期望将有益基因组合在一起。
(7)二进神经网络遗传算法扩展阅读
评估编码策略常采用以下3个规范:
a)完备性(completeness):问题空间中的所有点(候选解)都能作为GA空间中的点(染色体)表现。
b)健全性(soundness): GA空间中的染色体能对应所有问题空间中的候选解。
c)非冗余性(nonrendancy):染色体和候选解一一对应。
目前的几种常用的编码技术有二进制编码,浮点数编码,字符编码,变成编码等。
而二进制编码是目前遗传算法中最常用的编码方法。即是由二进制字符集{0,1}产生通常的0,1字符串来表示问题空间的候选解。
8. 如何使用遗传算法或神经网络在MATLAB 中求二元函数最小值
% 2008年4月12日修改
%**********************%主函数*****************************************
function main()
global chrom lchrom oldpop newpop varible fitness popsize sumfitness %定义全局变量
global pcross pmutation temp bestfit maxfit gen bestgen length epop efitness val varible2 varible1
global maxgen po pp mp np val1
length=18;
lchrom=30; %染色体长度
popsize=30; %种群大小
pcross=0.6; %交叉概率
pmutation=0.01; %变异概率
maxgen=1000; %最大代数
mp=0.1; %保护概率
%
initpop; % 初始种群
%
for gen=1:maxgen
generation;
end
%
best;
bestfit % 最佳个体适应度值输出
bestgen % 最佳个体所在代数输出
x1= val1(bestgen,1)
x2= val1(bestgen,2)
gen=1:maxgen;
figure
plot(gen,maxfit(1,gen)); % 进化曲线
title('精英保留');
%
%********************** 产生初始种群 ************************************
%
function initpop()
global lchrom oldpop popsize
oldpop=round(rand(popsize,lchrom)); %生成的oldpop为30行12列由0,1构成的矩阵
%其中popsize为种群中个体数目lchrom为染色体编码长度
%
%*************************%产生新一代个体**********************************
%
function generation()
global epop oldpop popsize mp
objfun; %计算适应度值
n=floor(mp*popsize); %需要保留的n个精英个体
for i=1:n
epop(i,:)=oldpop((popsize-n+i),:);
% efitness(1,i)=fitness(1,(popsize-n+i))
end
select; %选择操作
crossover;
mutation;
elite; %精英保留
%
%************************%计算适应度值************************************
%
function objfun()
global lchrom oldpop fitness popsize chrom varible varible1 varible2 length
global maxfit gen epop mp val1
a1=-3; b1=3;
a2=-2;b2=2;
fitness=0;
for i=1:popsize
%前一未知数X1
if length~=0
chrom=oldpop(i,1:length);% before代表节点位置
c=decimal(chrom);
varible1(1,i)=a1+c*(b1-a1)/(2.^length-1); %对应变量值
%后一未知数
chrom=oldpop(i,length+1:lchrom);% before代表节点位置
c=decimal(chrom);
varible2(1,i)=a2+c*(b2-a2)/(2.^(lchrom-length)-1); %对应变量值
else
chrom=oldpop(i,:);
c=decimal(chrom);
varible(1,i)=a1+c*(b1-a1)/(2.^lchrom-1); %对应变量值
end
%两个自变量
fitness(1,i)=4*varible1(1,i)^2-2.1*varible1(1,i)^4+1/3*varible1(1,i)^6+varible1(1,i)*varible2(1,i)-4*varible2(1,i)^2+4*varible2(1,i)^4;
%fitness(1,i) = 21.5+varible1(1,i)*sin(4*pi*varible1(1,i))+varible2(1,i) *sin(20*pi*varible2(1,i));
%一个自变量
%fitness(1,i) = 20*cos(0.25*varible(1,i))-12*sin(0.33*varible(1,i))+40 %个体适应度函数值
end
lsort; % 个体排序
maxfit(1,gen)=max(fitness); %求本代中的最大适应度值maxfit
val1(gen,1)=varible1(1,popsize);
val1(gen,2)=varible2(1,popsize);
%************************二进制转十进制**********************************
%
function c=decimal(chrom)
c=0;
for j=1:size(chrom,2)
c=c+chrom(1,j)*2.^(size(chrom,2)-j);
end
%
%************************* 个体排序 *****************************
% 从小到大顺序排列
%
function lsort()
global popsize fitness oldpop epop efitness mp val varible2 varible1
for i=1:popsize
j=i+1;
while j<=popsize
if fitness(1,i)>fitness(1,j)
tf=fitness(1,i); % 适应度值
tc=oldpop(i,:); % 基因代码
fitness(1,i)=fitness(1,j); % 适应度值互换
oldpop(i,:)=oldpop(j,:); % 基因代码互换
fitness(1,j)=tf;
oldpop(j,:)=tc;
end
j=j+1;
end
val(1,1)=varible1(1,popsize);
val(1,2)=varible2(1,popsize);
end
%*************************转轮法选择操作**********************************
%
function select()
global fitness popsize sumfitness oldpop temp mp np
sumfitness=0; %个体适应度之和
for i=1:popsize % 仅计算(popsize-np-mp)个个体的选择概率
sumfitness=sumfitness+fitness(1,i);
end
%
for i=1:popsize % 仅计算(popsize-np-mp)个个体的选择概率
p(1,i)=fitness(1,i)/sumfitness; % 个体染色体的选择概率
end
%
q=cumsum(p); % 个体染色体的累积概率(内部函数),共(popsize-np-mp)个
%
b=sort(rand(1,popsize)); % 产生(popsize-mp)个随机数,并按升序排列。mp为保护个体数
j=1;
k=1;
while j<=popsize % 从(popsize-mp-np)中选出(popsize-mp)个个体,并放入temp(j,:)中;
if b(1,j)<q(1,k)
temp(j,:)=oldpop(k,:);
j=j+1;
else
k=k+1;
end
end
%
j=popsize+1; % 从统一挪过来的(popsize-np-mp)以后个体——优秀个体中选择
for i=(popsize+1):popsize % 将mp个保留个体放入交配池temp(i,:),以保证群体数popsize
temp(i,:)=oldpop(j,:);
j=j+1;
end
%
%**************************%交叉操作***************************************
%
function crossover()
global temp popsize pcross lchrom mp
n=floor(pcross*popsize); %交叉发生的次数(向下取整)
if rem(n,2)~=0 % 求余
n=n+1; % 保证为偶数个个体,便于交叉操作
end
%
j=1;
m=0;
%
% 对(popsize-mp)个个体将进行随机配对,满足条件者将进行交叉操作(按顺序选择要交叉的对象)
%
for i=1:popsize
p=rand; % 产生随机数
if p<pcross % 满足交叉条件
parent(j,:)=temp(i,:); % 选出1个父本
k(1,j)=i;
j=j+1; % 记录父本个数
m=m+1 ; % 记录杂交次数
if (j==3)&(m<=n) % 满足两个父本(j==3),未超过交叉次数(m<=n)
pos=round(rand*(lchrom-1))+1; % 确定随机位数(四舍五入取整)
for i=1:pos
child1(1,i)=parent(1,i);
child2(1,i)=parent(2,i);
end
for i=(pos+1):lchrom
child1(1,i)=parent(2,i);
child2(1,i)=parent(1,i);
end
i=k(1,1);
j=k(1,2);
temp(i,:)=child1(1,:);
temp(j,:)=child2(1,:);
j=1;
end
end
end
%
%****************************%变异操作*************************************
%
function mutation()
global popsize lchrom pmutation temp newpop oldpop mp
m=lchrom*popsize; % 总的基因数
n=round(pmutation*m); % 变异发生的次数
for i=1:n % 执行变异操作循环
k=round(rand*(m-1))+1; %确定变异位置(四舍五入取整)
j=ceil(k/lchrom); % 确定个体编号(取整)
l=rem(k,lchrom); %确定个体中变位基因的位置(求余)
if l==0
temp(j,lchrom)=~temp(j,lchrom); % 取非操作
else
temp(j,l)=~temp(j,l); % 取非操作
end
end
for i=1:popsize
oldpop(i,:)=temp(i,:); %产生新的个体
end
%
%*********************%精英选择%*******************************************
%
function elite()
global epop oldpop mp popsize
objfun; %计算适应度值
n=floor(mp*popsize); %需要保留的n个精英个体
for i=1:n
oldpop(i,:)=epop(i,:);
% efitness(1,i)=fitness(1,(popsize-n+i))
end;
%
%*********************%最佳个体********************************************
%
function best()
global maxfit bestfit gen maxgen bestgen
bestfit=maxfit(1,1);
gen=2;
while gen<=maxgen
if bestfit<maxfit(1,gen)
bestfit=maxfit(1,gen);
bestgen=gen;
end
gen=gen+1;
end
%**************************************************************************
9. 关于神经网络,蚁群算法和遗传算法
神经网络并行性和自适应性很强,应用领域很广,在任何非线性问题中都可以应用,如控制、信息、预测等各领域都能应用。
蚁群算法最开始应用于TSP问题,获得了成功,后来又广泛应用于各类组合优化问题。但是该算法理论基础较薄弱,算法收敛性都没有得到证明,很多参数的设定也仅靠经验,实际效果也一般,使用中也常常早熟。
遗传算法是比较成熟的算法,它的全局寻优能力很强,能够很快地趋近较优解。主要应用于解决组合优化的NP问题。
这三种算法可以相互融合,例如GA可以优化神经网络初始权值,防止神经网络训练陷入局部极小且加快收敛速度。蚁群算法也可用于训练神经网络,但一定要使用优化后的蚁群算法,如最大-最小蚁群算法和带精英策略。
10. BP算法、BP神经网络、遗传算法、神经网络这四者之间的关系
这四个都属于人工智能算法的范畴。其中BP算法、BP神经网络和神经网络
属于神经网络这个大类。遗传算法为进化算法这个大类。
神经网络模拟人类大脑神经计算过程,可以实现高度非线性的预测和计算,主要用于非线性拟合,识别,特点是需要“训练”,给一些输入,告诉他正确的输出。若干次后,再给新的输入,神经网络就能正确的预测对于的输出。神经网络广泛的运用在模式识别,故障诊断中。BP算法和BP神经网络是神经网络的改进版,修正了一些神经网络的缺点。
遗传算法属于进化算法,模拟大自然生物进化的过程:优胜略汰。个体不断进化,只有高质量的个体(目标函数最小(大))才能进入下一代的繁殖。如此往复,最终找到全局最优值。遗传算法能够很好的解决常规优化算法无法解决的高度非线性优化问题,广泛应用在各行各业中。差分进化,蚁群算法,粒子群算法等都属于进化算法,只是模拟的生物群体对象不一样而已。