标准遗传算法(二进制编码 python实现)
代码地址: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实现)的更多相关文章
- 标准遗传算法(实数编码 python实现)模拟二进制交叉SBX 多项式变异
代码地址: https://github.com/guojun007/real_sga 本部分是采用实数编码的标准遗传算法,整体流程与上一篇二进制编码的基本一致, 主要区别在于本部分的交叉操作为模拟二 ...
- 遗传算法 TSP(Python代码)
该代码是本人根据B站up主侯昶曦的代码所修改的. 原代码github地址:https://github.com/Houchangxi/heuristic-algorithm/blob/master/T ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- Python标准库、第三方库和外部工具汇总
导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...
- Python 标准库、第三方库
Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...
- 140种Python标准库、第三方库和外部工具
导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- Python标准库的学习准备
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准 ...
随机推荐
- 开始第一段SPRINT
四则运算Sprint计划 1.小组成员: 李豌湄:master 江丹仪:产品负责人 2.现状: 初步有一个四则运算的程序代码, 我们这个团队的编程基础比较薄弱,还不知道怎么将程序与数据库连接,也是在边 ...
- 数学战神app(小学生四则运算app)进度
背景音乐仍有瑕疵,还在完善,不过大概完成,完善按钮声音,提示音等. 许家豪:负责代码程序设计 陈思明:界面背景美化 吴旭涛.王宏财:查缺补漏
- HTML 引入Css样式
- PAT 1036 跟奥巴马一起编程
https://pintia.cn/problem-sets/994805260223102976/problems/994805285812551680 美国总统奥巴马不仅呼吁所有人都学习编程,甚至 ...
- 项目引入android-support-v7-appcompat遇到的问题,no resource found that matches the given name 'android:Theme.AppCompat.Light'
一.问题 今天准备使用v7包中的ToolBar来用,但是在styles.xml中引入Theme.AppCompat.Light的时候,报错“no resource found that matches ...
- socketserver及相关的类 (处理socket服务端)+ event事件的使用
编写简单的套接字服务器并不难,然而,如果要创建的并非简单服务器,还要求助于服务器模块. 模块SocketServer是标准库提供的服务器框架的基石,这个框架包括好多服务器,他们基本服务器的基础上添加了 ...
- Linux基础学习(3)--初学注意
第三章——初学注意 一.学习Linux的注意事项 1.Linux严格区分大小写 2.Linux中所有内容以文件形式保存,包括硬件: (1)硬盘文件是/dev/sd[a-p] (2)光盘文件是/dev/ ...
- linux运维掌握不熟练命令用法记录
rename :批量修改文件名 [root@Dannyserver test]# ls .txt .txt .txt .txt [root@Dannyserver test]# rename 't ...
- BZOJ3835[Poi2014]Supercomputer——斜率优化
题目描述 Byteasar has designed a supercomputer of novel architecture. It may comprise of many (identical ...
- BZOJ3123[Sdoi2013]森林——主席树+LCA+启发式合并
题目描述 输入 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负 ...