(转)非常好的理解遗传算法的例子

遗传算法的手工模拟计算示例


为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各个主要执行步骤。

例:求下述二元函数的最大值:

(1) 个体编码

遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种符号串。本题中,用无符号二进制整数来表示。因 x1, x2 为 0 ~
7之间的整数,所以分别用3位无符号二进制整数来表示,将它们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可行解。

例如,基因型 X=101110 所对应的表现型是:x=[ 5,6 ]。个体的表现型x和基因型X之间可通过编码和解码程序相互转换。

(2) 初始群体的产生

遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始群体数据。本例中,群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机方法产生。

       如:011101,101011,011100,111001

(3) 适应度汁算

遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传机会的大小。本例中,目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接利用目标函数值作为个体的适应度。

(4)  选择运算

选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。一般要求适应度较高的个体将有更多的机会遗传到下一代群体中。                  

本例中,我们采用与适应度成正比的概率来确定各个个体复制到下一代群体中的数量。其具体操作过程是:

         ? 
先计算出群体中所有个体的适应度的总和  ?fi  ( i=1.2,…,M );

         ?  其次计算出每个个体的相对适应度的大小
fi / ?fi ,它即为每个个体被遗传

            
到下一代群体中的概率,
         ? 
每个概率值组成一个区域,全部概率值之和为1;
        
?  最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区

            
域内来确定各个个体被选中的次数。

(5)  交叉运算

交叉运算是遗传算法中产生新个体的主要操作过程,它以某一概率相互交换某两个个体之间的部分染色体。

       本例采用单点交叉的方法,其具体操作过程是:

       ? 先对群体进行随机配对;

       ? 其次随机设置交叉点位置;

       ? 最后再相互交换配对染色体之间的部分基因。

(6)  变异运算

变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,它也是产生新个体的一种操作方法。

        本例中,我们采用基本位变异的方法来进行变异运算,其具体操作过程是:

        ?
首先确定出各个个体的基因变异位置,下表所示为随机产生的变异点位置,其中的数字表示变异点设置在该基因座处;

        ? 然后依照某一概率将变异点的原有基因值取反。

对群体P(t)进行一轮选择、交叉、变异运算之后可得到新一代的群体p(t+1)。

从上表中可以看出,群体经过一代进化之后,其适应度的最大值、平均值都得到了明显的改进。事实上,这里已经找到了最佳个体“111111”。      

[注意]

需要说明的是,表中有些栏的数据是随机产生的。这里为了更好地说明问题,我们特意选择了一些较好的数值以便能够得到较好的结果,而在实际运算过程中有可能需要一定的循环次数才能达到这个最优结果。

时间: 2024-08-04 14:43:57

(转)非常好的理解遗传算法的例子的相关文章

转载:非常好的理解遗传算法的例子

遗传算法的手工模拟计算示例 为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各    个主要执行步骤.       例:求下述二元函数的最大值: (1) 个体编码           遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种       符号串.本题中,用无符号二进制整数来表示.           因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它       们连接在一起所组成的6位无符号二进制数就

很好的理解遗传算法的样例

遗传算法的手工模拟计算演示样例 为更好地理解遗传算法的运算过程,以下用手工计算来简单地模拟遗传算法的各    个主要运行步骤.       例:求下述二元函数的最大值: (1) 个体编码           遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种       符号串.本题中,用无符号二进制整数来表示.           因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它       们连接在一起所组成的6位无符号二进制

转 强烈推荐遗传算法入门例子

遗传算法的手工模拟计算示例为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各个主要执行步骤. 例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种符号串.本题中,用无符号二进制整数来表示.因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可行解.例如,基因型 X=101110 所对应的表现型是:x=[

java中的回调机制的理解(小例子)

这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到.在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数. 正常情况下开发人员使用已经定义好的API,这个过程叫Call.但是有时这样不能满足需求,就需要程序员注册自己的程序,然后让

转载:通俗理解遗传算法

一.遗传算法的应用 函数优化(遗传算法的经典应用领域):组合优化(实践证明,遗传算法对于组合优化中的NP完全问题,如0-1背包问题,TSP等,非常有效):自动控制: 机器人智能控制: 组合图像处理和模式识别: 人工生命: 遗传程序设计:     二.遗传学基本概念与术语 基因型(genotype):性状染色体的内部表现: 表现型(phenotype):染色体决定性状的外部表现,或者说,根据基因型形成的个体: 进化(evolution):逐渐适应生存环境,品质不断得到改良.生物的进化是以种群的形式

用遗传算法GA改进CloudSim自带的资源调度策略

首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一件事情: 用户有n个计算任务(Task),{t1,t2,t3,...tm},将这n个任务分配到m个资源(其实就是指虚拟机,Virtual Machine)上,用这m个资源来计算这n个任务(注意,一般n>m,且很多时候n>>m),直到所有任务都计算完成.如何分配使得这n个任务的总的计算时间最少

【分享】近4000份数学学习资源免费分享给大家

一直以来喜欢收集数学类的教程资源,于是费了好大劲从万千合集站上扒拉了下来,总结归类了一下,一共有将近4000本电子书.经测试,均可免费下载,可能会弹出小广告,可不必理会之.[仅供学术学习和交流,请无用于商业用途.]另外,如有可能,还请尽量支持正版纸质书.   数学史(54)     数学史.rar 55.6 MB   数学的起源与发展.rar 4.3 MB   费马大定理—一个困惑了世间智者358年的谜.pdf 9.5 MB   通俗数学名著译丛14-无穷之旅:关于无穷大的文化史.pdf 14.

样品GA的良好理解

遗传算法演示样本手册模拟 为了更好地理解遗传算法的计算过程,法的各    个主要运行步骤.       例:求下述二元函数的最大值: (1) 个体编码           遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种       符号串. 本题中.用无符号二进制整数来表示.           因 x1, x2 为 0 ~ 7之间的整数.所以分别用3位无符号二进制整数来表示.将它       们连接在一起所组成的6位无符号二进制数就形成了个体的基因型.表示一个可

【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea