from http://blog.sina.com.cn/s/blog_4b837cbf010008rm.html
早上下雨了,淋了一身,且罢,浇浇脑子,全当施肥,不知清醒否。书还在昨天看到的地方,那就继续吧。
对最优化问题,求最优解或近似最优解的传统方法主要有解析法、随机法和穷举法。解析法主要包括爬山法和间接法。随机法主要包括导向随机方法和盲目随机方法。而穷举法主要包括完全穷举法、回溯法、动态规划法和限界剪枝法。
也可用遗传算法求解,遗传算法与传统方法有本质区别。传统算法起始于单个点,而遗传算法则起始于群体;传统算法是针对问题特有的特点进行改善,而遗传算法则是独立于问题。
具体区别如下:
1、遗传算法与启发式算法的比较:
启发式算法是指通过寻求一种能产生可行解的启发式规则,找到问题的一个最优解或近似最优解。然而它必须对每一个所求的问题找出其特有的启发式规则,且一般无通用性,不适用于其他问题。但遗传算法采用的不适确定性规则,而是强调利用概率转换来引导搜索过程。
2、遗传算法与爬山法的比较:
爬山法是指接法、梯度法和Hessian法的通称。首先在最优解可能存在的地方选择一个初始点,然后通过分析目标函数的特性,由初始点移到一个新的点,然后再继续这个过程。爬山法的搜索过程是确定的,它通过产生一系列的点收敛到最优解。而遗传算法的搜索过程是随机的,它产生一系列随机种群序列。二者的主要差异为:爬山法的初始点只有一个,由决策者给出;遗传算法的初始点有多个,是随机产生的。爬山法由一个点产生一个新的点;遗传算法通过遗传操作,在当前的种群中经过交叉、变异和选择产生下一代种群。
3、遗传算法与穷举法的比较:
穷举法就是对解空间内的所有可能解进行搜索,方法简单易行,但求解效率太低。而遗传算法则具有较高的搜索能力和极强的鲁棒性。
4、遗传算法与盲目随机法的比较:
只有解在搜索空间形成紧致分布时,盲目随机法才比较有效。而遗传算法作为导向随机搜索方法,是对一个被编码的参数空间进行高效搜索。
总结一下,主要有以下四点不同:
A、 遗传算法搜索种群中的点是并行的,而不是单点。
B、 遗传算法并不需要辅助信息或辅助知识,只需要引进各项搜索方向的目标函数和相 对应的适应度。
C、 遗传算法使用概率变换规则,而不是确定的变换规则。
D、遗传算法工作使用编码参数集,而不是自身的参数集。(除了在实值个体中使用)
一些术语:
在遗传算法中,染色体对应的是数据或数组,在标准的遗传算法中,通常是由一维的串结构数据表现的。串上各个位置对应基因座,各位置上所取的值对应等位基因。遗传算法处理的是染色体或者叫基因型个体。一定数量的个体组成了群体,也叫集团。各个体对环境的适应程度叫适应度。
执行遗传算法时,包含两个必要的数据转换操作,一个是表现型到基因型的转换,它把搜索空间的参数或解转换成遗传空间中的染色体或个体,此过程称为编码操作;另一个是基因型到表现型的转换,它是前者的一个相反操作,称为译码操作。(对本项目而言,编码操作就是将各含能化合物设置成程序可以识别的二进制编码或其他代码,译码操作则是将生成的解转换成现实中的含能化合物结构或是分子式)
研究方向:
1、在遗传算法中,群体规模和遗传算子的控制参数的选取非常困难。存在过早收敛。
2、遗传算法的并行性主要有三个方面:个体适应度评价的并行性、整个群体各个个体适应度评价的并行性和子代群体产生过程的并行性。
3、分类系统属于基于遗传算法的机器学习中的一类,包括一个简单的基于串规则的并行生成子系统、规则评价子系统和遗传算法子系统。
4、遗传神经网络包括连接级、网络结构和学习规则的进化。
5、进化算法包括遗传算法、进化规划和进化策略,三种算法是独立发展起来的。
遗传算法的运行过程:
遗传算法模拟了自然选择和遗传中发生的复制、交叉和变异等现象,从任一初始种群(Population)出发,通过随机选择、交叉和变异操作,产生一群更适应环境的个体,使群体进化到搜索空间中越来越好的区域,这样一代一代地不断繁衍进化,最后收敛到一群最适应环境的个体(Individual),求得问题的最优解。
简单遗传算法的伪代码描述:
Procedure GA
Begin
T=0;
Initialize p(t) ; //p(t)表示 t代种群
Evaluate p(t); //评估第t代种群
While not finished do
Begin
T=t+1;
Select p(t) from p(t-1); //从上代种群众选择较优秀的个体到下代子群
Reproduce pairs in p(t);
Evaluate p(t);
End
End
遗传算法的三个基本操作:
1、 选择(Selection):根据各个个体的适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代群体中。体现了达尔文的适者生存原则。
2、 交叉(Crossover):最主要的遗传操作。将群体中的各个个体随机搭配成对,对每一个个体,以某个概率(称为交叉概率,Crossover Rate)交换它们之间的部分染色体。体现了信息交换的思想。
3、 变异(Mutation):对群体中的每一个个体,以某一概率(称为变异概率,Mutation Rate)改变某一个或某一些基因座上的基因值为其他的等位基因。
基本遗传算法(也称标准遗传算法或简单遗传算法,Simple Genetic Algorithm,简称SGA)是一种群体型操作,以群体中的所有个体为对象,只使用基本遗传算子:选择算子、交叉算子、变异算子。
基本遗传算法的步骤:
1、 染色体编码:使用固定长度的二进制符号串来表示群体中的个体,其等位基因值由二值{0,1}组成。包括编码、解码公式。
2、 个体适应度的监测评估:所有个体的适应度必须为非负数。需要预先确定好由目标函数值到个体适应度之间的转换规律,特别是要预先确定好当目标函数为负数时的处理方法。例如:可选取一个适当大的正数C,使个体的适应度为目标函数值加上正数C
3、 遗传算子:
(1) 选择运算使用比例选择算子。比例选择因子是利用比例于各个个体适应度的概率决定其子孙的遗传可能性。
(2) 交叉运算使用单点交叉算子。任意挑选经过选择操作中两个个体作为交叉对象,随机产生一个交叉点位置,两个个体在交叉点位置互换部分基因码,形成两个子个体。
(3) 变异运算使用基本位变异算子或均匀变异算子。为了避免过早收敛,对于二进制的基因码组成的个体种群,实现基因码的小概率翻转,即0变为1,1变为0。
4、 基本遗传算法的运行参数:
(1) 群体大小:一般取为20—100
(2) 遗传算法的终止进化代数:一般取为100—500
(3) 交叉概率:一般取为0.4—0.99
(4) 变异概率:一般取为0.0001—0.1
看到现在,觉得问题最难的地方就是适应度和目标函数的确定,如何对数据进行编码,也没于头绪,是不是没吃早餐的原因,又犯困了,歇会。
遗传算法目前存在的问题:
1、 适应度值标定方式多种多样,没有一个简洁、通用的方法,不利于对遗传算法的使用。
2、 遗传算法的早熟现象(即很快收敛到局部最优解而不是全局最优解)是迄今为止最难处理的关键问题。
3、 快要接近最优解时在最优解附近左右摆动,收敛较慢。
遗传算法通常需要解决以下问题:确定编码方案,使硬度函数标定,选择遗传操作方式,选择相关控制操作,停止准则确定等。(每个都得解决,不容易啊)
七种改进的遗传算法:
1、 分层遗传算法(Hierarchic Genetic Algorithm)
2、 CHC算法
3、 Messy算法
4、 自适应遗传算法(Adaption Genetic Algorithm)
5、 基于小生境技术的遗传算法(Niched Genetic Algorithm,简称NGA)
6、 并行遗传算法(Parallel Genetic Algorithm)
7、 混合遗传算法:遗传算法与最速下降法相结合;遗传算法与模拟退火法(Simulated Annealing)相结合
遗传算法求解多目标优化问题
解决含多目标和多约束的优化问题称为多目标优化问题(Multi-objective Opimization)。
本项目为多目标优化问题
Pareto最优解:不存在比其更优的解。常用方法:
1、 权重系数变换法:给每个目标函数赋予权重,其线性加权和为总的目标函数。
2、 并列选择法:先将群体中的全部个体按子目标函数的数目均等地划分为一些子群体,对每个子群体分配一个子目标函数,各个子目标函数在相应的子群体中独立地进行选择运算,各自选择出一些适应度高的个体组成一个新的子群体,然后再将所有这些新生成的子群体合并成一个完整的群体,在这个群体中进行交叉和变异操作,从而生成下一代的完整群体,如此不断地进行“分割—并列选择—合并”操作,最终可求出多目标优化问题的Pareto最优解。
3、 排列选择法:基于Pareto最优个体(Pareto最优个体是指群体中的这样一个或一些个体,群体中的其他个体都不比它或它们更优越),对群体中的各个个体进行排序,依据这个排列次序来进行进化过程中的选择运算,从而使得排在前面的Pareto最优个体将有更多的机会遗传到下一代群体中。如此这样经过一定代数的循环之后,最终就可求出多目标最优化问题的Pareto最优解。
4、 共享函数法:利用小生境遗传算法,将相同个体或类似个体的数量加以限制,以便能够产生出种类较多的不同的最优解。对于一个个体X,在它的附近还存在有多少种、多大程度相似的个体,是可以度量的,这种度量值称为小生镜数。
5、 混合法:选择算子的主体使用并列选择法,然后通过引入保留最佳个体和共享函数的思想来弥补只使用并列选择法的不足之处。(1)并列选择过程;(2)保留Pareto最优个体过程,对于子群体中的Pareto最优个体,不让其参与个体的交叉运算和变异运算,而是将这个或这些Pareto最优个体直接保留到下一代子群体中;(3)共享函数处理过程。
遗传算法有效性的理论依据为模式定理和积木块假设。模式定理保证了较优的模式(遗传算法的较优解)的样本呈指数级增长。积木块假设提出,遗传算法具备寻找到全局最优解的能力,即具有低阶、短距、高平均适应度的模式(积木块)在遗传算子作用下,相互结合,能生成高阶、长距、高平均适应度的模式,最终生成全局最优解。
基于三值字符集{0,1,*}所产生的能描述具有某些结构相似性的0、1字符串集的字符串称作模式。模式H中确定位置的个数称作该模式的阶数。一个模式的阶数越高,其样本数就越少,因而确定性越高。模式H中第一个确定位置和最后一个确定位置之间的距离称作该模式的定义距。
模式定理:在遗传算子选择、交叉和变异的作用下,具有阶数低、长度短、平均适应度高于群体平均适应度的模式在子代中将以指数级增长。
积木块假设(Building Block Hypothesis):阶数低、长度短、适应度高的模式(积木块)在遗传算子作用下,相互结合,能生成阶数高、长度长、适应度高的模式,可最终生成全局最优解。
在遗传算法中,将所有妨碍适应度高的个体的生成从而影响算法正常工作的问题统称为欺骗问题(Deceptive Problem)。
竞争模式:若模式H和H’中*的位置完全一致,但任一确定位的编码均不同,则称H和H’互为竞争模式。
欺骗性:假设f(X)的最大值对应的X的集合为X*,H为一包含X*的m阶模式,H的竞争模式为H’,而且f(H)>f(H’),则f为m阶欺骗。
最小欺骗性:在欺骗问题中,为了造成骗局所需设置的最小的问题规模(即阶数)成为最小欺骗性。
早熟(Premature Convergence,简称PC):未成熟收敛,即群体中个体的多样性过早地丢失,从而使算法陷入局部最优点。主要表现在两个方面:
1、 群体中所有的个体都陷入同一极值而停止进化。
2、 接近最优解的个体总是被淘汰,进化过程不收敛。
未成熟收敛的主要原因:
1、 理论上考虑的选择、交叉、变异操作都是绝对精确的,它们之间相互协调,能搜索到整个解空间,但是在具体实现时很难达到这个要求。
2、 所求解的问题是遗传算法欺骗问题。当解决的问题对于标准遗传算法来说比较困难时,遗传算法就会偏离寻优方向,这种问题被称为遗传算法欺骗问题。
3、 遗传算法处理的群体是有限的,因而存在随机误差,它主要包括取样误差和选择误差。取样误差是指所选择的有限群体不能代表整个群体所产生的误差。选择误差是指不能按期望的概率进行个体选择。
遗传算法早熟的具体表现:
1、 在进化初始阶段,生成了具有很高适应度的个体X。
2、 在基于适应度比例的选择下,其他个体被淘汰,大部分个体与X一致。
3、 相同的两个个体交叉,从而未能生成新个体。
4、 通过变异所生成的个体适应度高但数量少,所以被淘汰的概率很大。
5、 群体中的大部分个体都处于与X一致的状态。
防止未成熟收敛的方法:
1、 重新启动法:碰到未成熟问题而不能继续时,随即选择一组初始值重新进行遗传算法操作。
2、 配对策略(Mating Strategies):为了维持群体的多样性,有目的的选择配对个体,以防止根本不相似的个体进行配对。Eshelman提出了一种可以更直接的防止相似个体交配的方法—防止乱伦机制(Incest Prevention Mechanism):参与交配的个体是随机配对的,但只有当参与配对的个体间的海明距离超过一定阈值时,才允许他们进行交配。
3、 重组策略(Recombination Strategies):就是使用交叉算子。主要是从使用频率和交叉点两方面考虑,来维持群体的多样性。
4、 替代策略(Replacement Strategies):确定在选择、交叉产生的个体中,选择哪一个个体进入新一代群体。
性能评估:
目前,遗传算法的评估指标大多采用适应度值。
1、 在线性能(On-line Performance)评估准则:可用从第一代到当前的优化进程的平均值来表示。
2、 离线性能(Off-line Performance)评估准则:是在特定时刻或特定值的最佳性能的累积平均。即在进化过程中,每进化一代,就统计目前为止的各代中的最佳适应度或最佳平均适应度,并计算对进化代数的平均值。
离线性能用于测试算法的收敛性,在应用时,优化问题的求解可以得到模拟,在一定的优化进程停止准则下,当前最好的解可以被保存和利用;而在线性能优于测量算法的动态性,在应用时,优化问题的求解必须通过真实的实验在线实现,可以迅速得到较好的优化结果。
一个好的优化算法为:当xi能稳定地接近于全局极小点(或极大点)的邻域时,迅速收敛于x*,当满足给定的收敛准则时,迭代中止。
小生境技术:排挤机制----在一个有限的生存空间中,各种不同的生物为了延续生存,必须相互竞争各种有限的生存资源。差别较大的个体由于生活习性不同而很少竞争,处于平衡状态的大小固定的种群,新生个体将代替与之相似的旧个体。排挤机制用海明距离来度量个体之间的相似性。
共享函数:用来度量两个个体的相邻关系和程度。给定个体g,它的共享函数由它与种群中的其他个体的相似程度决定。将g与种群中其他个体逐个比较,若很相似,则对g的共享函数加一个较大值;否则,就加一个较小值。个体共享度为该个体与群体内其他个体共享函数之和。
遗传算法的基本原理和方法
一、编码
编码:把一个问题的可行解从其解空间转换到遗传算法的搜索空间的转换方法。
解码(译码):遗传算法解空间向问题空间的转换。
二进制编码的缺点是汉明悬崖(Hamming Cliff),就是在某些相邻整数的二进制代码之间有很大的汉明距离,使得遗传算法的交叉和突变都难以跨越。
格雷码(Gray Code):在相邻整数之间汉明距离都为1。
(较好)有意义的积木块编码规则:所定编码应当易于生成与所求问题相关的短距和低阶的积木块;最小字符集编码规则,所定编码应采用最小字符集以使问题得到自然的表示或描述。
二进制编码比十进制编码搜索能力强,但不能保持群体稳定性。
动态参数编码(Dynamic Paremeter Coding):为了得到很高的精度,让遗传算法从很粗糙的精度开始收敛,当遗传算法找到一个区域后,就将搜索现在在这个区域,重新编码,重新启动,重复这一过程,直到达到要求的精度为止。
编码方法:
1、 二进制编码方法
缺点:存在着连续函数离散化时的映射误差。不能直接反映出所求问题的本身结构特征,不便于开发针对问题的专门知识的遗传运算算子,很难满足积木块编码原则
2、 格雷码编码:连续的两个整数所对应的编码之间仅仅只有一个码位是不同的,其余码位都相同。
3、 浮点数编码方法:个体的每个基因值用某一范围内的某个浮点数来表示,个体的编码长度等于其决策变量的位数。
4、 各参数级联编码:对含有多个变量的个体进行编码的方法。通常将各个参数分别以某种编码方法进行编码,然后再将他们的编码按照一定顺序连接在一起就组成了表示全部参数的个体编码。
5、 多参数交叉编码:将各个参数中起主要作用的码位集中在一起,这样它们就不易于被遗传算子破坏掉。
评估编码的三个规范:完备性、健全性、非冗余性。
二、选择
遗传算法中的选择操作就是用来确定如何从父代群体中按某种方法选取那些个体遗传到下一代群体中的一种遗传运算,用来确定重组或交叉个体,以及被选个体将产生多少个子代个体。
常用的选择算子:
1、 轮盘赌选择(Roulette Wheel Selection):是一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。选择误差较大。
2、 随机竞争选择(Stochastic Tournament):每次按轮盘赌选择一对个体,然后让这两个个体进行竞争,适应度高的被选中,如此反复,直到选满为止。
3、 最佳保留选择:首先按轮盘赌选择方法执行遗传算法的选择操作,然后将当前群体中适应度最高的个体结构完整地复制到下一代群体中。
4、 无回放随机选择(也叫期望值选择Excepted Value Selection):根据每个个体在下一代群体中的生存期望来进行随机选择运算。方法如下
(1) 计算群体中每个个体在下一代群体中的生存期望数目N。
(2) 若某一个体被选中参与交叉运算,则它在下一代中的生存期望数目减去0.5,若某一个体未被选中参与交叉运算,则它在下一代中的生存期望数目减去1.0。
(3) 随着选择过程的进行,若某一个体的生存期望数目小于0时,则该个体就不再有机会被选中。
5、 确定式选择:按照一种确定的方式来进行选择操作。具体操作过程如下:
(1) 计算群体中各个个体在下一代群体中的期望生存数目N。
(2) 用N的整数部分确定各个对应个体在下一代群体中的生存数目。
(3) 用N的小数部分对个体进行降序排列,顺序取前M个个体加入到下一代群体中。至此可完全确定出下一代群体中M个个体。
6、无回放余数随机选择:可确保适应度比平均适应度大的一些个体能够被遗传到下一代群 体中,因而选择误差比较小。
7、均匀排序:对群体中的所有个体按期适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。
8、最佳保存策略:当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用它来代替掉本代群体中经过交叉、变异等操作后所产生的适应度最低的个体。
9、随机联赛选择:每次选取几个个体中适应度最高的一个个体遗传到下一代群体中。
10、排挤选择:新生成的子代将代替或排挤相似的旧父代个体,提高群体的多样性。
三、交叉
遗传算法的交叉操作,是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。
适用于二进制编码个体或浮点数编码个体的交叉算子:
1、单点交叉(One-point Crossover):指在个体编码串中只随机设置一个交叉点,然后再该点相互交换两个配对个体的部分染色体。
2、两点交叉与多点交叉:
(1) 两点交叉(Two-point Crossover):在个体编码串中随机设置了两个交叉点,然后再进行部分基因交换。
(2) 多点交叉(Multi-point Crossover)
3、均匀交叉(也称一致交叉,Uniform Crossover):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体。
4、算术交叉(Arithmetic Crossover):由两个个体的线性组合而产生出两个新的个体。该操作对象一般是由浮点数编码表示的个体。
四、变异
遗传算法中的变异运算,是指将个体染色体编码串中的某些基因座上的基因值用该基因座上的其它等位基因来替换,从而形成以给新的个体。
以下变异算子适用于二进制编码和浮点数编码的个体:
1、基本位变异(Simple Mutation):对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。
2、均匀变异(Uniform Mutation):分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。(特别适用于在算法的初级运行阶段)
3、边界变异(Boundary Mutation):随机的取基因座上的两个对应边界基因值之一去替代原有基因值。特别适用于最优点位于或接近于可行解的边界时的一类问题。
4、非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值。对每个基因座都以相同的概率进行变异运算之后,相当于整个解向量在解空间中作了一次轻微的变动。
5、高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P2的正态分布的一个随机数来替换原有的基因值。
五、适应度函数
适应度函数也称评价函数,是根据目标函数确定的用于区分群体中个体好坏的标准。适应度函数总是非负的,而目标函数可能有正有负,故需要在目标函数与适应度函数之间进行变换。
评价个体适应度的一般过程为:
1、对个体编码串进行解码处理后,可得到个体的表现型。
2、由个体的表现型可计算出对应个体的目标函数值。
3、根据最优化问题的类型,由目标函数值按一定的转换规则求出个体的适应度。
适应度函数的设计主要应满足以下要求:
1、单值、连续、非负、最大化。
2、合理、一致性。较难。
3、计算量小。
4、通用性强。
由目标函数f(x)到适应度函数Fit(f(x))的转换方法有以下三种:
1、直接以待解的目标函数f(x)转换为适应度函数。
Fit(f(x))=f(x) 目标函数为最大化问题
Fit(f(x))=-f(x) 目标函数为最小化问题
问题:可能不满足常用的轮盘赌选择中概率非负的要求;某携带求解的函数在函数值分布上相差很大,由此得到的平均适应度可能不利于体现种群的平均性能。
2、做转换。(具体转换方法略)
3、同2,转换公式不同。
适应度尺度变换(Fitness Scaling Transform):在遗传算法的不同阶段,对个体的适应度进行适当的扩大或缩小。常用的尺度变换方法如下:
1、线性尺度变换:F'=aF+b
2、 乘幂尺度变换:F'=Fk
3、 指数尺度变换:F'=exp(-beitaF)
六、约束条件处理
1、搜索空间限定法:对遗传算法的搜索空间的大小加以限制,使得搜索空间中表示一个个体的点与解空间中的表示一个可行解的点有一一对应关系。
2、可行解变换法:在由个体基因型向个体表现型的变换中,增加使其满足约束条件的处理过程,即寻找个体基因型与个体表现型的多对一变换关系,扩大了搜索空间,使进化过程中所产生的个体总能通过这个变换而转化成杰空间中满足约束条件的一个可行解。
3、罚函数法:对在解空间中无对应可行解的个体计算其适应度时,处以一个惩罚函数,从而降低该个体的适应度,使该个体被遗传到下一代群体中的概率减小。
------------------------------------------------------------------------这两天看书,觉得有启迪的地方:
种群的表示和初始化
一般情况下,在遗传算法中大多采用单层的二进制串染色体表示方法。
采用格雷码,可用来克服传统的二进制表示方法的不足。
不足:1、表示途中临近值之间过大的海明(Hamming)距离使用标准的二进制表示情况下,搜索过程易导致欺骗性结果或不能有效定位于全局最小值。
2、对一些问题域,有一个争论时二进制表示事实上是靠不住的,它掩盖了搜索的自然性。
3、Wright声称使用实值基因的遗传算法在数值函数优化上与二进制编码相比有许多的优点。表现为:在函数计算前,不需要从染色体到表现值的转换,提高了遗传算法的效率;计算机内部高效的浮点表示可直接使用,减少了内存需要;相对于离散的二进制或其他值,没有精度损失;对应用不同的遗传算子非常自由。(Michalewicz在其著作《进化策略(Evolution Strategies)》)中描述了使用实值编码的细节)
如果通过重组产生的新种群的个体数目少于原始种群的大小,新种群和旧种群大小的差异被称为代购。在这种情况下,每一代产生的新个体数较少,这时的遗传算法称为“稳态”或“增量”的。如果一个或多个最适合个体被连续代繁殖,则遗传算法被称为得到“精英策略”。
稳态遗传算法(Steady-State GA)最重要的一个特征是在每一代中不创建比现存种群多的后代,计算次数被减少,并且铲射功能后代时由于有少的新个体存储,内存要求也小。
策略:将最差适应度个体进行替代,将最老个体进行替代,要求最佳个体必须确保繁殖到下一代种群中。
遗传算法工具箱里有一个体函数reins使个体可在重组后重插入种群中。
以前总是认为,遗传算法的个体应该只剩下最后一个,所以编程出现了很大的误差,最后发现种群的数目不应该减少,从上文中又对此处有了新的认识,可以在小范围内减少个体数目,目前我的算法就是这样实现的。
下礼拜来可以看看书中的例子,刚翻了一下,有很多值得借鉴的地方。在很多细微之处对基本遗传算法进行了改进。
-----------------------------------------------------------------------------