24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1355  |  回复: 2
当前主题已经存档。

gggwww

荣誉版主 (著名写手)

[交流] 遗传算法

遗传算法

遗传算法(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与其适应度值成正比。最通常的实现方法是轮盘赌(roulett
e wheel)模型。
  (2) 交叉算子(Crossover): 交叉算子将被选中的两个个体的基因链按概率pc进行交叉
,生成两个新的个体,交叉位置是随机的。其中Pc是一个系统参数。
  (3) 变异算子(Mutation): 变异算子将新个体的基因链的各位按概率pm进行变异,对
二值基因链(0,1编码)来说即是取反。
  上述各种算子的实现是多种多样的,而且许多新的算子正在不断地提出,以改进GA的
某些性能。系统参数(个体数n,基因链长度l,交叉概率Pc,变异概率Pm等)对算法的收敛速度
及结果有很大的影响,应视具体问题选取不同的值。
  GA的程序设计应考虑到通用性,而且要有较强的适应新的算子的能力。OOP中的类的继
承为我们提供了这一可能。
  定义两个基本结构:基因(ALLELE)和个体(INDIVIDUAL),以个体的集合作为群体类TP
opulation的数据成员,而TSGA类则由群体派生出来,定义GA的基本操作。对任一个应用实
例,可以在TSGA类上派生,并定义新的操作。

  TPopulation类包含两个重要过程:
  FillFitness: 评价函数,对每个个体进行解码(decode)并计算出其适应度值,具体操
作在用户类中实现。
Statistic: 对当前群体进行统计,如求总适应度sumfitness、平均适应度average、最好
个体fmax、最坏个体fmin等。

  TSGA类在TPopulation类的基础上派生,以GA的系统参数为构造函数的参数,它有4个
重要的成员函数:
  Select: 选择算子,基本的选择策略采用轮盘赌模型(如图2)。轮盘经任意旋转停止
后指针所指向区域被选中,所以fi值大的被选中的概率就大。
  Crossover: 交叉算子,以概率Pc在两基因链上的随机位置交换子串。
  Mutation: 变异算子,以概率Pm对基因链上每一个基因进行随机干扰(取反)。
  Generate: 产生下代,包括了评价、统计、选择、交叉、变异等全部过程,每运行一
次,产生新的一代。
  
  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;};
  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);
  &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。变异概率太大,会导致不稳定。

[ Last edited by 幻影无痕 on 2006-11-12 at 08:35 ]
回复此楼

» 收录本帖的淘帖专辑推荐

水和水的研究 英语 source

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yuefour

金虫 (正式写手)

1

22222222222222222
2楼2005-06-08 20:30:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lab2006

金虫 (小有名气)

0.5

谢谢楼主哈。
3楼2006-12-14 20:55:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 gggwww 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 366求调剂 +9 不知名的小卅 2026-04-11 9/450 2026-04-13 01:19 by 幸免 ..
[考研] 一志愿085502,267分求调剂 +14 再忙也要吃饭啊 2026-04-08 15/750 2026-04-12 22:33 by fqwang
[考研] 一志愿浙大生物325分求调剂 +9 zysheng 2026-04-12 9/450 2026-04-12 22:31 by yuyin1233
[考研] 270求调剂 +14 杨乐369 2026-04-11 14/700 2026-04-11 20:16 by 蓝云思雨
[考研] 调剂求助 +6 果然有我 2026-04-11 7/350 2026-04-11 16:22 by 明月此时有
[考研] 一志愿985机械学硕380求调剂 +5 关关雎鸠10 2026-04-11 5/250 2026-04-11 10:10 by 知念。A
[考研] 293求调剂 +6 勇远库爱314 2026-04-08 6/300 2026-04-11 10:08 by zhq0425
[考研] 085506-求调剂-285分 +3 雷欧飞踢 2026-04-08 3/150 2026-04-11 08:37 by zhq0425
[考研] 265求调剂 +12 风说她早忘了 2026-04-10 13/650 2026-04-10 18:56 by chemisry
[考研] 材料专业344求调剂 +16 hualkop 2026-04-10 21/1050 2026-04-10 17:28 by laoshidan
[考研] 071000生物学调剂求助 +17 zzzzwww 2026-04-09 20/1000 2026-04-10 15:55 by 求调剂zz
[考研] 一志愿沪9,326生物学求相关专业调剂 +4 刘墨墨 2026-04-09 4/200 2026-04-10 12:07 by pengliang8036
[考研] 一志愿华东师范生物学326分,求调剂 +8 刘墨墨 2026-04-09 8/400 2026-04-10 12:00 by pengliang8036
[考研] 292求调剂 +9 笑笑袁 2026-04-09 9/450 2026-04-10 10:05 by LHGeng
[考研] 本科西工大 0856 324求调剂 +10 wysyjs25 2026-04-09 11/550 2026-04-10 08:37 by 5268321
[考研] 283电子信息求调剂 +4 三石WL 2026-04-08 4/200 2026-04-09 10:21 by wp06
[考研] 085404,334分,求调剂 +5 sunjie8888 2026-04-08 8/400 2026-04-09 07:26 by sunjie8888
[考研] 316求调剂 +4 15318418673 2026-04-07 4/200 2026-04-07 22:12 by hemengdong
[考研] 085100建筑学 寻求跨专业调剂 一志愿南大294分 校级省级国家级奖项若干 踏实肯干 +3 1021075758 2026-04-06 4/200 2026-04-07 09:23 by 蓝云思雨
[考研] 312求调剂 +4 LR6 2026-04-06 4/200 2026-04-07 08:42 by jp9609
信息提示
请填处理意见