代码地址:https://github.com/guojun007/binary_sga

种群初始化:

binary_sga/population_init/population_init.py

#种群初始化函数
def population_init(population, N, V, nbits):
#自变量个数V并没有用到
del population[:]
for i in xrange(N):
tempIndividual=[]
for j in nbits:
tempVal=[]
for k in xrange(j):
tempVal.append(random.randint(0, 1))
tempIndividual.append(tempVal)
population.append(tempIndividual)

选择操作:(轮盘赌选择)

binary_sga/selection/selection.py

#!/usr/bin/env python
#encoding:UTF-8
import copy
import random
#轮盘赌选择法
def selection(population, xbin):
s=sum(xbin)
temp=[k*1.0/s for k in xbin]
temp2=[] s2=0
for k in temp:
s2=s2+k
temp2.append(s2) temp3=[]
for _ in xrange(len(population)):
r=random.random()
for i in xrange(len(temp2)):
if r<=temp2[i]:
temp3.append(i)
break temp4=[]
temp5=[]
for i in temp3:
temp4.append(copy.deepcopy(population[i]))
temp5.append(xbin[i])
population[:]=temp4
xbin[:]=temp5

交叉操作:(单点交叉)

binary_sga/crossover/crossover.py

#二进制编码,单点交叉
def crossover(population, alfa, nbits):
for i in xrange(len(population), 2):
for j in xrange(len(nbits)):
r=random.random()
if r<alfa:
p=random.randint(1, nbits[j]-1)
population[i][j][p:], population[i+1][j][p:]=population[i+1][j][p:], population[i][j][p:]

变异操作:

binary_sga/mutation/mutation.py

def mutation(population, belta, nbits):
for i in xrange(len(population)):
for j in xrange(len(nbits)):
for k in xrange(nbits[j]):
r=random.random()
if r<belta:
population[i][j][k]^=1

二进制个体解码操作:

binary_sga/decode/decode.py

#种群个体解码
def decode(population, population_real, minBinVal, maxBinVal, nbits):
del population_real[:] def iner(valList):
L=len(valList)
s=0
for i in valList:
s=s+i*(2**(L-1))
L=L-1
return s for i in population:
temp=[]
for j in i:
temp.append(iner(j)) for j in xrange(len(temp)):
temp[j]=temp[j]*(maxBinVal[j]-minBinVal[j])*1.0/(2**(nbits[j])-1)+minBinVal[j]
population_real.append(temp)

测试函数部分:

binary_sga/function/object_fun.py

#对偶问题, 转化为求最大值
#二维 Rastrigin测试函数
def object_fun(p):
import math
x=p[0]
y=p[1]
object_value=20.0+x**2+y**2-10.0*(math.cos(2*math.pi*x)+math.cos(2*math.pi*y))
return 100.0-object_value """
#求最大值,无需转化
#二维 Schaffer测试函数
def object_fun(p):
import math
x=p[0]
y=p[1]
object_value =0.5-((math.sin( math.sqrt(x**2+y**2) ))**2-0.5)/(1+0.001*(x**2+y**2))**2
return object_value
"""

主函数部分:

binary_sga/sga.py

N=200
V=2
nbits=(17, 17)
maxBinVal=(-5, -5)
minBinVal=(5, 5)
population=[]
population_real=[]
alfa=0.9
belta=0.05 #目标函数值列表
xbin=[] def per_run():
population_init(population, N, V, nbits) for i in xrange(200):
decode(population, population_real, minBinVal, maxBinVal, nbits)
eval_fun(population_real, xbin)
selection(population, xbin)
crossover(population, alfa, nbits)
mutation(population, belta, nbits) decode(population, population_real, minBinVal, maxBinVal, nbits)
eval_fun(population_real, xbin)
return 100.0-max(xbin)

N为个体种群数。

V为自变量个数。

nbits 各个自变量二进制编码的长度。

maxBinVal 各个自变量 上限。
minBinVal 各个自变量 下限。
种群个体 二进制编码 列表 population。
种群个体 实数解码  列表 population_real。
alfa=0.9  交叉概率。
belta=0.05 变异概率。

标准遗传算法(二进制编码 python实现)的更多相关文章

  1. 标准遗传算法(实数编码 python实现)模拟二进制交叉SBX 多项式变异

    代码地址: https://github.com/guojun007/real_sga 本部分是采用实数编码的标准遗传算法,整体流程与上一篇二进制编码的基本一致, 主要区别在于本部分的交叉操作为模拟二 ...

  2. 遗传算法 TSP(Python代码)

    该代码是本人根据B站up主侯昶曦的代码所修改的. 原代码github地址:https://github.com/Houchangxi/heuristic-algorithm/blob/master/T ...

  3. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  4. Python标准库、第三方库和外部工具汇总

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  5. Python 标准库、第三方库

    Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...

  6. 140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  7. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  8. python标准库00 学习准备

    Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...

  9. Python标准库的学习准备

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准 ...

随机推荐

  1. 第三个spring冲刺第9天

    今天是第三阶段冲刺的最后第二天了,我们该实现的功能基本已经全部实现了,有填空的,选择题的,还有计时的,目前就是在查BUG,看看有哪些地方有BUG需要修改,以下截图是我们团队所做的功能截图: 首页: 填 ...

  2. PAT L3-003 社交集群

    https://pintia.cn/problem-sets/994805046380707840/problems/994805053141925888 当你在社交网络平台注册时,一般总是被要求填写 ...

  3. node的cookie-parser和express-session

    let express = require('express'); let cookieParser = require('cookie-parser'); let expressSession = ...

  4. redi集群测试

    redis集群的测试   原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html 1.测试存取值 客户端连接集群redis-cli需要带上 -c ...

  5. WMS与MES集成

    ERP的物流管理只偏重于帐务的管理,对现场实物流的及时性和精细程度管理均不够,无法满足企业日益精细化管理的需求,WMS可以弥补这个缺陷,WMS采用条码技术及时反应物流过程中的变化,同时将存量细化到货架 ...

  6. python matplotlib绘图

    import numpy as np import matplotlib.pyplot as plt from scipy.constants.constants import alpha from ...

  7. [Java] Thread的start()和run()函数区别

    1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状 ...

  8. map()实现zip()功能

    c = (map(lambda x,y:(x,y),[1,2,3],["abd","def","ghi"]))print(list(c)) ...

  9. BZOJ2595 WC2008游览计划(斯坦纳树)

    斯坦纳树板子题. 考虑状压dp,设f[i][j][S]表示当前在点(i,j)考虑转移,其所在的联通块包含的关键点集(至少)为S的答案. 转移时首先枚举子集,有f[i][j][S]=min{f[i][j ...

  10. WordPress 之 在注册界面 实现 注册后密码直接显示在页面上

    前言:WordPress 功能无疑强大的,但有些功能实现上还是有少许不尽人意,比如在 网站上有新用户注册后,必须下发到用户填写的邮件才能接收到新密码,而密码又是系统自动生成的,如果因为某些原因用户接收 ...