遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)(遗传算法交叉操作算法伪代码)

网友投稿 552 2022-09-03


遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)(遗传算法交叉操作算法伪代码)

本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉。

首先,给出个人用python2.7实现的代码,具体模块已上传到:

#!/usr/bin/env python 2 #encoding:UTF-8 3 import numpy as np 4 import random 5 6 """ 7 SBX 模拟二进制交叉 8 9 输入:10 population 种群矩阵11 alfa 交叉概率12 numRangeList 决策变量的上限(下限默认为0)13 mu SBX方式的分布指数, 推荐为114 """15 def cross(population, alfa, numRangeList, mu=1):16 N=population.shape[0]17 V=population.shape[1]18 populationList=range(N)19 20 for _ in xrange(N):21 r=random.random()22 23 if r

以下内容引至:

最近在做作业遇到一个Dejong’s fifth function的multi modal的问题,用传统的GA方法尝试了很多次,的确没办法搞定,随机很多次也不一定在global optimum的地方得到一次解。前几天去导师家里的路上谈到这个事情,导师说一般现在都用SBX和polynomial的mutation。于是回来找了相关论文来看,找到了SBX最早的论文,奇怪的是,在论文中竟然没有给出伪代码,只是在讲解他的motivation。大概的motivation是这样的:

1:SBX主要是用于real number的编码问题,但是借鉴与来自binary 编码的idea。在binary中,假设2个parent分别为p1和p2,后代分别为c1和c2。那么是这么一个属性的:(p1+p2)/2=(c1+c2)/2。再定义一个叫做spread factor的玩意β=|(c2−c1)/(p2−p1)|

2:在SBX中就要满足第一个属性,以及尽量β也binary中的概率分布一致。由此一个方案:

c1=(p2+p1)−0.5∗β(p2−p1)

c2=(p2+p1)+0.5∗β(p2−p1)

大家可以自己计算,是满足上面2个玩意的。

3:那么接下来其实就是求β的,因为是要让在real的问题中的β的分布尽量接近binary中的,那么就要首先知道binary中的分布。binary中的分布如下:

c(β)=0.5(n+1)βn,β≤1 and c(β)=0.5(n+1)1βn+2,β>1

也就是说β有2个分布的,具体怎么做呢?我看到有人实现是这么来的。

3.1:随机一个数字在[0,1]之间,如果该数字小于等于0.5按照第一个来求,否则按照第二个来求。求解的时候是按照对β的概率分布等于这个随机数字来计算的。这个只需要求积分即可,手工就能推导出来。

最后我用这个方法再加上tournament selection以及polynomial mutation的方法,在求解上面说的multi modal的问题的时候,竟然很多次都求解出来了!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:遗传算法,选择算子之锦标赛选择(竞赛选择)(选择算子对遗传算法收敛性的影响)
下一篇:MyBatis 如何配置多个别名 typeAliasesPackage
相关文章

 发表评论

暂时没有评论,来抢沙发吧~