代码地址:

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. Activiti For Eclipse(Mars)插件配置

    Activiti BPMN 2.0 designer : http://www.activiti.org/designer/update/

  2. ASP.NET MVC布局

    一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页 @RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合 ...

  3. HTTP消息头(HTTP headers)-常用的HTTP请求头与响应头

    HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的那些组件.HTTP消息头用来准确描述正在获取的资源.服务器或 ...

  4. linux-shell系列8 netstat用法

    1 查看TCP连接状态 netstat -n|awk '{print $6}'|sort|uniq -c|sort -rn netstat -n|awk '/^tcp/ {++S[$NF]};END{ ...

  5. LOJ114 k大(xiao)异或和(线性基)

    构造线性基后将其消至对任意位至多只有一个元素该位为1.于是就可以贪心了,将k拆成二进制就好.注意check一下是否能异或出0. #include<iostream> #include< ...

  6. Zabbix3.0学习笔记

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  7. zxing生成二维码设置边框颜色

    真是研究了很久很久,满满的泪啊 zxing生成二维码,默认是可以增加空白边框的,但是并没有可以设置边框颜色的属性. 其中增加空白边框的属性的一句话是: Map hints = new HashMap( ...

  8. day22 os模块

    # 主要用于和当前操作系统做对接的时候获取系统参数用的 import os # os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 # os.chdir("dir ...

  9. 19+ JavaScript 常用的简写技巧

    博主说:对于任何基于 JavaScript 的开发人员来说,这绝对是一篇必读的文章,乃提升开发效率之神器也. 正文 js 1. 三元运算符 当你想用一行代码来写if...else语句的时候,使用三元操 ...

  10. Nginx反代至Tomcat基于memcached的session保持

    实现功能:基于前面tomcat基础简介与示例文章 (1) tomcat cluster将会话保存至memcached中:实现模型: 这里写图片描述 配置B,C主机安装openjdk与tomcat[本次 ...