求遗传算法的详细介绍!

wolfbrother04 2004-05-11 09:51:47
楼上的兄弟们,谁有遗传算法的详细介绍呀!小弟等着急用谢绝!
...全文
817 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kurt8276 2004-07-11
  • 打赏
  • 举报
回复
编码
for
{
复制
交叉
编译
}
viviyw 2004-07-11
  • 打赏
  • 举报
回复
楼上是在哪找到的。:)
babam 2004-05-13
  • 打赏
  • 举报
回复
http://www.lasg.ac.cn/cgi-bin/forum/topic.cgi?forum=4&topic=1535
whalefish2001 2004-05-13
  • 打赏
  • 举报
回复
楼上的兄弟们,谁有遗传算法的详细介绍呀!小弟等着急用谢绝!

楼主的这句话是什么意思啊?
读了半天,怎么读怎么感觉有些问题。

去图书馆借本书看看吧。

firebird519 2004-05-13
  • 打赏
  • 举报
回复
2.4遗传算法的实现方法
在用遗传算法进行优化设计以前,首先要设计出适合于问题求解的遗传优化模型。设计遗传算法的基本过程大致可以分为制定编码方案、确定适值函数、确定选择策略、设计交叉和变异操作、选取控制参数等几个步骤。在完成遗传算法的设计工作之后,就可以按照遗传优化的算法的结构进行编程实现。进而进行具体的问题求解。
2.4.1染色体编码
染色体编码的策略和方法对遗传操作,尤其是对交叉操作的性能有很大的影响。因此要适当的选择编码方法对充分发挥遗传算法的功能是十分重要的。对于编码和解码,我们把问题空间的解转换成遗传空间的个体,这种转换操作被称为编码;反之,对经过遗传操作的个体进行性能评价时又需要把遗传空间的个体转换为问题空间的解,再采用适值函数对解进行评价,这种转换操作被称为解码。
理论上而言,编码应该适和要解决的问题,而不是简单的描述问题。Balakrishman较全面的讨论了不同编码方法的特性,针对一类特别的应用,为设计和选择编码方法提出了几条编码特性:
完全性(completeness): 原则上,分布在所有问题域的解都可能被构造出来。
封闭性(closure):每个基因编码对应一个可接受的个体,封闭性保证系统从不产生无效的个体。
紧致性(compactnes):若两种基因编码g1和g2都被解码成相同的个体,若g1比g2占的 空间小,就认为g1比g2紧致。
可扩展性(scalability):
多重性(multiplicity):多个基因型解码成一个表现型,即从基因型到相应的表现型空间是多对一的关系,这是基因的多重型。若相同的基因型被解码成不同的表现型,这是表现型的多重型。
个体可塑性(flexibility):决定表现型与相应给定基因型是受环境影响的。
模块性(modulity):若表现型的构成中有多个重复的结构,在基因型编码中这种重复是应当避免的。
冗余性(redundancy):冗余性能提高可靠性和鲁捧性(robustnes)。
复杂性(complexity):包括基因型的结构复杂性,解码复杂性,计算时空复杂性(基因解码、适应值、再生等)。
在所有的特性中,其中满意的特性是:完全性、可测性和复杂性。但以上特性有时是矛盾的。通过这些特性的评估,我们可以尽量找出最适合问题解的编码。
通常,比较常用的编码方案有二进制编码(binary encoding)、实数编码(real number encoding)、结构式编码(structural encoding)等。采用不同的编码方案,可能会对算法的优化性能产生较大的影响。本文就基于这一点,选择了一种更有效的染色体(Chromosome)编码(Coding)方法——一种改进的自然数编码,从而达到了改进算法效率的目的。
2.4.2 选取适应度函数(select fitness function)
遗传算法在进化搜索中基本不利用外部信息,仅以适应度函数(fitness function)为依据,利用种群中每个个体的适应度值来进行搜索。因此适应度函数的选取致关重要,直接影响到算法的收敛速度以及能否找到最优解。
常用的适应度函数基本上有以下三种:
直接以待求解的目标函数转化为适应度函数,即
若目标函数为最大化问题:Fit(f(x))=f(x) (2.1)
若目标函数为最小问题:Fit(f(x))=-f(x) (2.2)
这种适应度函数简单直观,但存在两个问题,其一是可能不满足常用的轮盘赌选择中概率非负的要求;其二是某些代求解的函数在函数值上分布很大,由此得到的平均适应度可能不利于体现种群的平均性能,影响算法的性能。
若目标函数为最小问题,则
(2.3)
式中 为 的最大值估计。
若目标函数为最大问题,则
(2.4)
式中 为 的最大值估计。
这种方法是对第一种方法的改进,但有时存在界限值预先估计困难、不可能精确的问题。
若目标函数为最小问题
(2.5)
其中C>=0,C+f(x)>=0
若目标函数为最小问题
(2.6)
其中C>=0,C-f(x)>=0
2.4.3 确定选择策略
选择是用来确定重组或交叉个体,以及被选个体将产生多少个子代个体。个体选择概率的常用分配方法有以下几种:按比例的适应度分配(proportional fitness assignment)、基于排序的适应度分配(rank-based fitness assignment)。常用的选择方法有:轮盘赌选择法(roulette wheel selection)、随机遍历抽样法(stochastic universal sampling)、局部选择法(local selection)、锦标赛选择法(tournament selection)。
我们可以根据以下几个概念来选择不同的选择算法:
选择压力(selection pressure) 最佳个体选中的概率与平均选种的概率的比值。
偏差(bias) 个体正规化适应度与其期望再生概率的绝对差值。
个体扩展(spread) 单个个体子代个数的范围。
多样化损失(loss of diversity) 在选择阶段未选中的个体数目占种群的比例。
选择强度(selection intensity)将正规高斯分布应用于选择方法,期望平均适应度。
选择方差(selection fitness assignment)将正规高斯分布应用于选择方法,期望种群适应度的方差。
不同的选择行为是有差别的,基本遗传算法达到收敛的世代数与选择强度成反比较高的选择强度是很好的选择方法,但太高会导致收敛过快,解的质量差。在本论文中我们选择轮盘赌选择,即类似于博彩游戏中的轮盘赌。
2.4.4 交叉/基因重组(crossover/recombination)
基因重组是把两个父个体的部分结构加以替换重组而生成新个体的操作也称交叉(crossover)。重组的目的是为了能够在下一代产生新的个体,通过重组交叉操作,遗产运算的搜索的能力得以飞跃的提高。基因重组交叉的种类有:
1、实值重组:包括离散重组、中间重组、线性重组。
2、二进制交叉:二进制交叉包括:单点交叉、多点交叉、均匀交叉。
在这里我们以二进制交叉为例,对基因重组作以说明。
(1)、单点交叉
单点交叉中,交叉点k的范围为[1,num-1],num为个体变量数目,在该点为分界相互交换变量。现取下面两个10位变量的父个体:
父个体1:0 1 1 1 0 0 1 1 0 1 0
父个体2:1 0 1 0 1 1 0 0 1 0 1
交叉点的位置为5,如图2.4.1所示,交叉后生成两个子个体:
子个体1:0 1 1 1 0 1 0 0 1 0 1
子个体2:1 0 1 0 1 0 1 1 0 1 0





图2.1 单点交叉
(2)、多点交叉
对于多点交叉,m个位置 可以无重复随机地选择,在交叉点之间的变量间续地相互交换,产生两个新的后代,但在第一位变量与第一个交叉点之间的一段不做交换。
现取下面两个10位变量的父个体:
父个体1:0 1 1 1 0 0 1 1 0 1 0
父个体2:1 0 1 0 1 1 0 0 1 0 1
交叉点的位置为2、6、10,如图2.4.2所示,交叉后生成两个子个体:
子个体1:0 1 1 0 1 1 1 1 0 1 1
子个体2:1 0 1 1 0 0 0 0 1 0 0




图2.2 多点交叉
(3)、均匀交叉
单点和多点交叉的定义使得个体在交叉点处分成片段。均匀交叉更加广义化,将每个点都作为潜在的交叉点。随机地产生与个体等长的0-1掩码,掩码中的片段表明了哪个父个体向子个体提供变量值。
现取下面两个10位变量的父个体:
父个体1:0 1 1 1 0 0 1 1 0 1 0
父个体2:1 0 1 0 1 1 0 0 1 0 1
掩码样本(1 表示父个体1提供变量值,0表示父个体2提供变量值):
样本1: 0 1 1 0 0 0 1 1 0 1 0
样本2: 1 0 0 1 1 1 0 0 1 0 1
交叉后两个新个体为:
子个体1:1 1 1 0 1 1 1 1 1 1 1
子个体2:0 0 1 1 0 0 0 0 0 0 0
2.4.5 变异(mutation)
重组之后是子代的变异,个体变量以很小的概率或步长产生转变,变量转变的概率或步长与变量的个数成反比,与种群大小无关。变异本身是一种搜索,与选择/重组算子结合在一起,保证了遗传算法的有效性,使遗传算法有局部随机搜索能力;同时使得遗传算法保持种群的多样性,以防止出现非成熟收敛。在变异中,变异率不能取得太大,如果大于0.5,遗传算法就退化为随机搜索,而遗传算法的一些重要的数学特性和搜索能力也不复存在。
对二进制编码而言,变异意味着反转。对于每个个体,变量值的改变是随机的。如下所示,有11位变量的个体,第四位发生了翻转。
变异前:0 1 1 1 0 0 1 1 0 1 0
变异后:0 1 1 0 0 0 1 1 0 1 0

一般而言,一个世代的简单进化过程就包括了基于适应度的选择和再生、交叉和变异操作。以后一代一代的进化过程如此循环下去,每一代结束都产生新的种群。演化的代数主要取决于代表问题的收敛状态,末代种群中最佳个体作为问题的最优近似解。遗传算法的一般流程如下:
第一步 随机产生初始化种群,个体数目一定,每个个体表示为染色体的基因编码。
第二步 计算个体的适应度,并判断是否符合优化准则,若符合,输出最佳个体及其代表的最优解,并结束计算。否则,继续。
第三步 依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体可能被淘汰。
第四步 按照一定的交叉概率和交叉方法,生成新个体。
第五步 按照一定的变异概率和变异方法,生成新的个体。
第六步 由交叉和变异产生新一代的种群,返回到第二步。
firebird519 2004-05-13
  • 打赏
  • 举报
回复
找本好一些的书看看就行了!

我做过遗传算法!只要你把遗传算法理解了,一点也不难!!!
bm1408 2004-05-12
  • 打赏
  • 举报
回复
不难度,不会!
koli0220 2004-05-12
  • 打赏
  • 举报
回复
兄弟,我现在也在学习遗传算法编一个组卷系统,我可以给你一个程序研究研究,我也看了很久,明白了一点点算法!但还不是太明白!我们可以一起研究研究!
QQ:25512302
金枪-鱼 2004-05-12
  • 打赏
  • 举报
回复
赞成楼上的!网上多的很!^_^
freefalcon 2004-05-11
  • 打赏
  • 举报
回复
楼上只有神仙,呵呵

充分运用google啊

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧