代码地址:

https://github.com/guojun007/real_sga

本部分是采用实数编码的标准遗传算法,整体流程与上一篇二进制编码的基本一致,

主要区别在于本部分的交叉操作为模拟二进制交叉,即SBX ,

变异操作 为 多项式变异

real_sga/crossover/crossover.py

#实数编码,SBX交叉
def crossover(population, pcross_real, V, minRealVal, maxRealVal, eta_c):
for i in xrange(0, len(population), 2):
#如果随机概率大于交叉概率则不进行交叉操作
if random.random()>pcross_real:
continue #对两个个体执行SBX交叉操作
for j in xrange(V):
#对某自变量交叉
ylow=minRealVal[j]
yup=maxRealVal[j]
y1=population[i][j]
y2=population[i+1][j]
r=random.random()
if r<=0.5:
betaq=(2*r)**(1.0/(eta_c+1.0))
else:
betaq=(0.5/(1.0-r))**(1.0/(eta_c+1.0)) child1=0.5*( (1+betaq)*y1+(1-betaq)*y2 )
child2=0.5*( (1-betaq)*y1+(1+betaq)*y2 )
child1=min(max(child1, ylow), yup)
child2=min(max(child2, ylow), yup) population[i][j]=child1
population[i+1][j]=child2

以上代码是根据相关论文所写,是原始方式的化简版本。

以下给出官方的原始代码的 Python2.7   重构版。

#实数编码,SBX交叉
def crossover(population, pcross_real, V, minRealVal, maxRealVal, eta_c):
for i in xrange(0, len(population), 2):
#如果随机概率大于交叉概率则不进行交叉操作
if random.random()>pcross_real:
continue
#对两个个体执行SBX交叉操作
for j in xrange(V):
#判断是否对某自变量交叉
if random.random()>0.5:
continue
#如果两个体某自变量相等则不操作
if population[i][j]==population[i+1][j]:
continue
#对某自变量交叉
y1=min(population[i][j], population[i+1][j])
y2=max(population[i][j], population[i+1][j])
ylow=minRealVal[j]
yup=maxRealVal[j]
r=random.random()
beta=1.0+(2.0*(y1-ylow)/(y2-y1))
alpha=2.0-beta**( -(eta_c+1.0) )
if r<=(1.0/alpha):
betaq=(r*alpha)**(1.0/(eta_c+1.0))
else:
betaq=(1.0/(2.0-r*alpha))**(1.0/(eta_c+1.0))
child1=0.5*( (y1+y2)-betaq*(y2-y1) ) beta=1.0+(2.0*(yup-y2)/(y2-y1))
alpha=2.0-beta**( -(eta_c+1.0) )
if r<=(1.0/alpha):
betaq=(r*alpha)**(1.0/(eta_c+1.0))
else:
betaq=(1.0/(2.0-r*alpha))**(1.0/(eta_c+1.0))
child2=0.5*( (y1+y2)-betaq*(y2-y1) ) child1=min(max(child1, ylow), yup)
child2=min(max(child2, ylow), yup)
population[i][j]=child1
population[i+1][j]=child2

多项式变异:

real_sga/mutation/mutation.py

#Routine for real polynomial mutation of an individual
#实数编码的常规多项式变异 def mutation(population, pmut_real, V, minRealVal, maxRealVal, eta_m):
for i in xrange(len(population)):
for j in xrange(V):
r=random.random()
#对个体某变量进行变异
if r<=pmut_real:
y=population[i][j]
ylow=minRealVal[j]
yup=maxRealVal[j]
delta1=1.0*(y-ylow)/(yup-ylow)
delta2=1.0*(yup-y)/(yup-ylow)
#delta=min(delta1, delta2)
r=random.random()
mut_pow=1.0/(eta_m+1.0)
if r<=0.5:
xy=1.0-delta1
val=2.0*r+(1.0-2.0*r)*(xy**(eta_m+1.0))
deltaq=val**mut_pow-1.0
else:
xy=1.0-delta2
val=2.0*(1.0-r)+2.0*(r-0.5)*(xy**(eta_m+1.0))
deltaq=1.0-val**mut_pow
y=y+deltaq*(yup-ylow)
y=min(yup, max(y, ylow))
population[i][j]=y

标准遗传算法(实数编码 python实现)模拟二进制交叉SBX 多项式变异的更多相关文章

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

    本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉. 首先,给出个人用python2.7实现的代码,具体模块已上传到: https://github.com/guojun007/sb ...

  2. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

  3. 标准遗传算法(二进制编码 python实现)

    代码地址:https://github.com/guojun007/binary_sga 种群初始化: binary_sga/population_init/population_init.py #种 ...

  4. Python编程笔记二进制、字符编码、数据类型

    Python编程笔记二进制.字符编码.数据类型 一.二进制 bin() 在python中可以用bin()内置函数获取一个十进制的数的二进制 计算机容量单位 8bit = 1 bytes 字节,最小的存 ...

  5. 用python实现模拟登录人人网

    用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...

  6. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  7. Python实现模拟登陆

    大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...

  8. Python字符串与二进制串的相互转换

    python基础知识之字符编码与转换 - 机壳啦 - 博客园https://www.cnblogs.com/home979/p/7838244.html Python 字符串与二进制串的相互转换 - ...

  9. 员工管理系统+字符编码+Python代码文件操作

    员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1  debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...

随机推荐

  1. 第三个Sprint ------第八天

    四则运算APP开发基本完成! PC端运行结果截图 移动端(华为手机)测试截图 总结:通过这次课程设计,我体会到团队协作的重要性,也体会到了理论联系实际的意义.做一件事,要坚持不懈,不能半途而废!

  2. String系列-----AbstractStringBuilder

    1. AbstractStringBuilder是StringBuffer和StringBuilder的父类 package com.amazing.jdk.string_2017_12_31; im ...

  3. 【转】XSHELL下直接下载文件到本地(Windows)

    XSHELL下直接下载文件到本地(Windows) http://www.cnblogs.com/davytitan/p/3966606.html

  4. Java日志输出问题

    以前有一个同事,说自己的Java控制台程序,输出的信息,打印信息以及错误信息,在windows的command line刷屏,想复制下来,想要自输出到日志文件里. 自己写文件太麻烦,他从网上只找到用重 ...

  5. [转帖]服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?

    来源:https://www.zhihu.com/question/19599986 作者: https://www.zhihu.com/people/yuan-hao-yang/answers IT ...

  6. hdu 4685(强连通分量+二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意:n个王子和m个公主,王子只能和他喜欢的公主结婚,公主可以和所有的王子结婚,输出所有王子可能 ...

  7. JavaScript--XML DOM 总结

    XML DOM 2018-09-04 XML简介 1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML ...

  8. js md5 中文

    最近手机端通过js对请求数据加密,发现针对中文加密的结果和asp.net的webapi加密结果不一致 网上搜索了一下,发现以下js可用 function md5(string) { var x = A ...

  9. bzoj1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你 ...

  10. 08 Zabbix Item类型之Zabbix agent类型

    点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 08 Zabbix Item类型之Zabbix agent类型 Zabbix agent类型的item是使用部署在服务器端的age ...