遗传算法⼆进制编码c语⾔,遗传算法,实数编码的交叉操作之
SBX(模拟⼆进制交叉)...
本⽂主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟⼆进制交叉。
⾸先,给出个⼈⽤python2.7实现的代码,具体模块已上传到:
github/guojun007/sbx_cross
#!/usr/bin/env python
#encoding:UTF-8
import numpy as np
import random
"""
SBX 模拟⼆进制交叉
输⼊:
population 种矩阵
alfa 交叉概率
numRangeList 决策变量的上限(下限默认为0)
mu SBX⽅式的分布指数, 推荐为1
"""
def cross(population, alfa, numRangeList, mu=1):
N=population.shape[0]
V=population.shape[1]
populationList=range(N)
for _ in xrange(N):
r=random.random()
if r
p1, p2=random.sample(populationList, 2)
bq=np.array([0]*V)
randList=np.random.random(V)
#根据概率向量判断不同概率函数的选择
orTF=(randList<=0.5)
#计算不同决策变量的 不同概率选择 下的 系数
for j in xrange(V):
if orTF[j]==True:
bq[j]=(2.0*randList[j])**(1.0/(mu+1))
else:
bq[j]=(1.0/(2.0*(1-randList[j])))**(1.0/(mu+1))
#取出选定的两个个体
old_p1=population[p1, ]
old_p2=population[p2, ]
#计算交叉后的两个新个体
new_p1=0.5*((1+bq)*old_p1+(1-bq)*old_p2)
new_p2=0.5*((1-bq)*old_p1+(1+bq)*old_p2)
#上下限判断,防⽌越界
new_p1=np.max(np.vstack((new_p1, np.array([0]*V))), 0) new_p1=np.min(np.vstack((new_p1, numRangeList)), 0) new_p2=np.max(np.vstack((new_p2, np.array([0]*V))), 0) new_p2=np.min(np.vstack((new_p2, numRangeList)), 0) #将交叉后的个体更新回种
population[p1, ]=new_p1
population[p1, ]=new_p2
###以下是测试⽤例
if __name__=="__main__":
random.seed(0)
np.random.seed(0)
xN=20
yN=3
alfa=0.9二进制编码转换
population=np.random.rand(xN*yN).reshape(xN, yN)*1.0 ###运⾏函数
print population
print '-'*50
cross(population, alfa, np.array([1]*3))
print '-'*50
print population
以下内容引⾄:
blog.csdn/silence1214/article/details/48802317
最近在做作业遇到⼀个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的问题的时候,竟然很多次都求解出来了!
标准遗传算法(实数编码 python实现)模拟⼆进制交叉SBX 多项式变异
代码地址: github/guojun007/real_sga 本部分是采⽤实数编码的标准遗传算法,整体流程与上⼀篇⼆进制编码的基本⼀致,主要区别在于本部分的交叉操作为模拟⼆ ...
SBX(Simulated binary crossover&rpar;模拟⼆进制交叉算⼦和DE(differential evolution&rpar;差分进化算⼦
⼀起来学演化计算-SBX(Simulated binary crossover)模拟⼆进制交叉算⼦和DE(differential evolution)差分进化算⼦ 觉得有⽤的话,欢迎⼀起讨论相互学习 ...
多⽬标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c
遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后⼀部分, 这⼀部分也是我 从读该算法源代码和看该算法论⽂理解偏差最⼤的  函数模块. 这⾥,⾸先提⼀下,遗传算法的  交叉操作.变异操作都 ...
Python 字符编码及其⽂件操作
本章节内容导航: 1.字符编码:⼈识别的语⾔与机器机器识别的语⾔转化的媒介. 2.字符与字节:字符占多少个字节,字符串转化 3.⽂件操作:操作硬盘中的⼀块区域:读写操作 注:浅拷贝与深拷贝 ⽤法: d ...
字符编码py2,py3操作,SecureCRT的会话编码的设置
对之前的字符串类型和⼆进制类型(bytes类型),可以这样关联记忆,把字符串类型当作是Unicode,把bytes类型当作是GBK或者UTF-8或者是⽇⽂编码.这样字符串要转成⼆进制,那么就需要编码e ...
python学习道路(day3note)&lpar;元组,字典 ,集合,字符编码,⽂件操作)
1.元组()元组跟列表⼀样,但是不能增删改,能查.元组⼜叫只读列表2个⽅法 ⼀个 count ⼀个 index
2.字典{}字典是通过key来寻value因为这⾥功能⽐较多,所以写⼊了⼀个Code⾥⾯ ...
Python-字典、集合、字符编码、⽂件操作整理-Day3
1.字典 1.1.为什么有字典: 有个需求,存所有⼈的信息 这时候列表就不能轻易的表⽰完全names = ['stone','liang'] 1.
2.元组: 定义符号()t = (1,2,3)tupl ...
python开发基础之数据类型、字符编码、⽂件操作
⼀.知识点 1.⾝份运算: 2.现在计算机系统通⽤的字符编码⼯作⽅式:在计算机内存中,统⼀使⽤Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码.⽤记事本编辑的时候,从⽂件 ...
随机推荐
JAVASCRIPT实现⽹页版:俄罗斯⽅块
HTML+CSS+JS实现俄罗斯⽅块完整版,素材只有图⽚,想要的下载图⽚按提⽰名字保存,css中⽤的时候注意路径!!主要在JS中!JS附有详细注释 效果: 按键提⽰:[键盘按键] 素材:图⽚名字与代码 ...
iOS-NSDate
⼀.概念解释 1.什么是NSTimeZone? NSTimeZone:时区是⼀个地理名字,是为了克服各个地区或者国家之间在时间上的混乱设定的.
1).GMT:0:00格林威治标准时间:UTC +00: ...
40w会议投票系统优化⽅案
40w会议投票系统优化⽅案 最近2天谈了⼀个项⽬,根据提出的需求是,该系统本来是属于⼀个⼤系统的分割出来的⼀个很⼩的系统,但是由于是并发关系会耗费资源很⼤,所以分割出来.据了解,系统采⽤的mysql+ ...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。