有关遗传算法

2016-02-19 17:59 1 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐有关遗传算法,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】


  遗传算法(Genetic Algorithm, GA)是近几年发展起来的一种崭新的全局优化算法,它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性的提高。这一点体现了自然界中"物竞天择、适者生存"的进化过程。
  
  1962年Holland教授首次提出了GA算法的思想,从而吸引了大批的研究者,迅速推广到优化、搜索、机器学习等方面,并奠定了坚实的理论基础。
  
  用遗传算法解决问题时,首先要对待解决问题的模型结构和参数进行编码,一般用字符串表示,这个过程就将问题符号化、离散化了。也有在连续空间定义的GA(Genetic Algorithm in Continuous Space, GACS),暂不讨论。
  
  一个串行运算的遗传算法(Seguential Genetic Algoritm, SGA)按如下过程进行:
  
  (1) 对待解决问题进行编码;
  (2) 随机初始化群体X(0):=(x1, x2, … xn);
  (3) 对当前群体X(t)中每个个体xi计算其适应度F(xi),适应度表示了该个体的性能好坏;
  (4) 应用选择算子产生中间代Xr(t);
  (5) 对Xr(t)应用其它的算子,产生新一代群体X(t+1),这些算子的目的在于扩展有限个体的覆盖面,体现全局搜索的思想;
  (6) t:=t+1;假如不满足终止条件继续(3)。
  
  GA中最常用的算子有如下几种:
  
  (1) 选择算子(selection/reprodUCtion): 选择算子从群体中按某一概率成对选择个体,某个体xi被选择的概率Pi与其适应度值成正比。最通常的实现方法是轮盘赌(roulette wheel)模型。
  
  (2) 交叉算子(Crossover): 交叉算子将被选中的两个个体的基因链按概率pc进行交叉,生成两个新的个体,交叉位置是随机的。其中Pc是一个系统参数。
  
  (3) 变异算子(Mutation): 变异算子将新个体的基因链的各位按概率pm进行变异,对二值基因链(0,1编码)来说即是取反。
  
  上述各种算子的实现是多种多样的,而且许多新的算子正在不断地提出,以改进GA的某些性能。系统参数(个体数n,基因链长度l,交叉概率Pc,变异概率Pm等)对算法的收敛速度及结果有很大的影响,应视具体问题选取不同的值。
  
  GA的程序设计应考虑到通用性,而且要有较强的适应新的算子的能力。OOP中的类的继续为我们提供了这一可能。定义两个基本结构:基因(ALLELE)和个体(INDIVIDUAL),以个体的集合作为群体类TPopulation的数据成员,而TSGA类则由群体派生出来,定义GA的基本操作。对任一个应用实例,可以在TSGA类上派生,并定义新的操作。
  
  TPopulation类包含两个重要过程:
  
  FillFitness: 评价函数,对每个个体进行解码(decode)并计算出其适应度值,具体操作在用户类中实现。
  Statistic: 对当前群体进行统计,如求总适应度sumfitness、平均适应度average、最好个体fmax、最坏个体fmin等。
  
  SGA的结构及类定义如下(用C++编写):
  
  typedef char ALLELE; // 基因类型
  typedef struct{
  ALLELE *chrom;
  float fitness; // fitness of Chromosome
  }INDIVIDUAL; // 个体定义
  
  class TPopulation{ // 群体类定义
  public:
  int size; // Size of population: n
  int lchrom; // Length of chromosome: l
  float sumfitness, average;
  INDIVIDUAL *fmin, *fmax;
  INDIVIDUAL *pop;
  
  TPopulation(int popsize, int strlength);
  ~TPopulation();
  inline INDIVIDUAL &Individual(int i){ return pop[i];};
  void FillFitness(); // 评价函数
  virtual void Statistics(); // 统计函数
  };
  
  class TSGA : public TPopulation{ // TSGA类派生于群体类
  public:
  float pcross; // Probability of Crossover
  float pmutation; // Probability of Mutation
  int gen; // Counter of generation
  
  TSGA(int size, int strlength, float pm=0.03, float pc=0.6):
  TPopulation(size, strlength)
  {gen=0; pcross=pc; pmutation=pm; } ;
  virtual INDIVIDUAL& Select();
  virtual void Crossover(INDIVIDUAL &parent1, INDIVIDUAL
  &parent2,INDIVIDUAL &child1, INDIVIDUAL &child2);
  virtual ALLELE Mutation(ALLELE alleleval);
  virtual void Generate(); // 产生新的一代
  };
  
  用户GA类定义如下:
  
  class TSGAfit : public TSGA{
  
  public:
  
  TSGAfit(int size,float pm=0.0333,float pc=0.6)
  
  :TSGA(size,24,pm,pc){};
  
  void print();
  
  };
  
  由于GA是一个概率过程,所以每次迭代的情况是不一样的;系统参数不同,迭代情况也不同。在实验中参数一般选取如下:个体数n=50-200,变异概率Pm=0.03, 交叉概率Pc=0.6。变异概率太大,会导致不稳定。
  

来源:https://www.tulaoshi.com/n/20160219/1616557.html

延伸阅读
宝宝遗传基因 谁决定宝宝特征 宝宝的出生给爸爸妈妈带来无限的欢乐,随着孩子一天一天的长大,总是发现孩子身上的特征与自己有很多的相似之处,那么从遗传优生的角度上来看,到底父母给 宝宝遗传基因 在哪些部分呢?跟着母婴小编一起来看看吧。 宝宝遗传基因,让人别无选择的遗传 肤色:它总是遵循父母中和色的自然法则。比如,...
宝宝长相遗传的秘密都有哪些 新生儿会遗传到父母的长相,当宝宝出生后,就不停的会有人说,宝宝的眼睛像谁,嘴巴像谁等等。那么,你知道宝宝长相遗传的秘密都有哪些吗?今天,小编就来为你详细解读宝宝长相遗传究竟是怎么回事,千万别错过哦。    宝宝长相遗传的秘密都有哪些 宝宝长相遗传的秘密 肤色:让人别无选择。它总...
大家知道,孩子的相貌与身材通常与父母比较相似,有时简直象同个模里复印出来一样,这就是遗传的效应,这里面有些什么规律联系? 有关专家经过长期研究发现: 肤色: 遗传时,不偏不倚,让人别无选择。 它总是遵循“相乘后再平均”的自然法规,给你打着父母“中和”色的烙印。比如,父母皮肤较黑,绝不会有白嫩肌肤的...
孩子的常见病与遗传有关吗 典型的遗传病大多是罕见病,但事实上许多常见病也与遗传有关。新生儿中常见的无脑畸形和脊柱裂、先天性心脏病、马蹄内翻足、唇裂、腭裂等,还一些多见于成年人的溃疡病、冠心病、高血压病等都与遗传因素有关。 与遗传有关的常见病多是由数个甚至许多个致病基因的共同作用造成的。遗传学上通常把这些常见病划入“多...
标签: 怀孕
每个家长都希望自己的孩子能健健康康的成长,但是一些先天遗传疾病往往让家长很愧疚和无奈,下面就为大家介绍几大与遗传密切相关的常见疾病,以助于家长及时预防,让孩子远离疾病! 孩子的哪些疾病与先天遗传有关系 偏头痛:如果父母一方有偏头痛,孩子患病几率是50%,如果父母都患病,遗传几率更高。偏头痛症状包括头前侧或者两侧刺痛...

经验教程

498

收藏

5
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部