import numpy as np
import matplotlib.pyplot as plt
import time
DNA_SIZE = 22            # DNA序列长度
POP_SIZE = 1000           # 种群中的个体数量
CROSS_RATE = 0.8         # 某个个体是否交配的概率
MUTATION_RATE = 0.003     # 变异概率
N_GENERATIONS = 200
X_BOUND = [-1, 2]         # X 定义域def F(x): return x * np.sin(10 * np.pi * x) + 2     # 定义函数# 适应度直接返回函数值
def get_fitness(pred): return pred# 解码: 二进制翻译成十进制,并归一化至(-1,2)
def translateDNA(pop): return pop.dot(2 ** np.arange(DNA_SIZE)[::-1]) / float(2**DNA_SIZE-1) * X_BOUND[1]# 基于适应度选择个体
'''numpy.random.choice(a, size=None, replace=True, p=None)用法:
从一个给定的一维序列中声生一个随机样本。
a:一维数组;在本例中是[0, 1, 2……99] 对应每个个体的下标
size:a的大小
replace:是否可以产生重复的数字,在本例中可以
p:a中每个数字被选中的概率,在本例中是根据适应度算出的概率,用每个个体的适应度除以适应度的总和。
'''
def select(pop, fitness):  idx = np.random.choice(np.arange(POP_SIZE), size=POP_SIZE, replace=True,p=fitness/fitness.sum())return pop[idx]def crossover(parent, pop):     # 交叉重组if np.random.rand() < CROSS_RATE: # 是否要交配i_ = np.random.randint(0, POP_SIZE, size=1)      # 随机选出一个个体作为母亲# 产生一个一维的bool数组,用于决定交换哪几个值cross_points = np.random.randint(0, 2, size=DNA_SIZE).astype(np.bool)   parent[cross_points] = pop[i_, cross_points]    # 交叉重组return parent # 返回孩子# 变异
def mutate(child):for point in range(DNA_SIZE):if np.random.rand() < MUTATION_RATE:child[point] = 1 if child[point] == 0 else 0return child# ---------------------------------1.种群初始化----------------------------------------
# 随机产生POP_SIZE个 个体 每个序列长度为DNA_SIZE
pop = np.random.randint(2, size=(POP_SIZE, DNA_SIZE))
# print(pop) # 输出是个二维矩阵
plt.ion()       # something about plotting
x = np.linspace(*X_BOUND, 200)
plt.plot(x, F(x))for _ in range(N_GENERATIONS): # 迭代N_GENERATIONS次F_values = F(translateDNA(pop))    # 先解码,然后计算函数值# print(F_values) # 一维向量 对应每个个体的函数值# 画出种群的分布if 'sca' in globals(): sca.remove()sca = plt.scatter(translateDNA(pop), F_values, s=200, lw=0, c='red', alpha=0.5); plt.pause(0.05)#--------------------------------2.计算所有个体适应度-------------------------------------fitness = get_fitness(F_values)# print(fitness) # 一维向量 对应每个个体的适应度print("Most fitted DNA: ", pop[np.argmax(fitness), :], translateDNA(pop[np.argmax(fitness), :])) # 输出每一代中适应度最高的个体#--------------------------------3.基于适应度选择个体-------------------------------------pop = select(pop, fitness) # 经过选择的个体,是个二维数组,# print(pop)pop_copy = pop.copy() # 保存一下拷贝,后面要当父母#--------------------------------4.交叉重组-------------------------------------for parent in pop: # 遍历其中的每一个个体作为父亲child = crossover(parent, pop_copy) # 从pop_copy随意选择一个个体与parent交叉重组#--------------------------------5.变异-------------------------------------child = mutate(child)parent[:] = child       # 父亲被孩子代替# time.sleep(0.2) # 设置睡眠时间可以看每一步的迭代效果plt.ioff(); plt.show()

遗传算法python简单示例相关推荐

  1. [转载] python 简单示例说明os.walk和os.path.walk的不同

    参考链接: 示例说明Python2.x和Python3.x之间的重要区别 import os,os.path def func(arg,dirname,names): for filespath in ...

  2. python遗传算法计算实例_遗传算法python简单例子(详解)

    # -*-coding:utf-8 -*- #目标求解sin(x)最大值 import random import math import matplotlib.pyplot as plt #初始化种 ...

  3. python文本处理实例_Python 文件处理的简单示例

    这篇文章主要为大家详细介绍了Python 文件处理的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 相关的AP ...

  4. python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例

    这篇文章主要为大家详细介绍了python 获取本机IP.mac地址.计算机名的简单示例,具有一定的参考价值,可以用来参考一下. 对python获取本机IP.mac地址.计算机名感兴趣的小伙伴,下面一起 ...

  5. python简单单元测试示范卷_Python 单元测试的简单示例

    这篇文章主要为大家详细介绍了Python 单元测试的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 以前我是不 ...

  6. python二分法求解_Python使用二分法求平方根的简单示例

    这篇文章主要为大家详细介绍了Python使用二分法求平方根的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 使 ...

  7. python 搭建的http 动态服务器_Python 创建HTTP服务器的简单示例

    这篇文章主要为大家详细介绍了Python 创建HTTP服务器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ...

  8. python简单装饰器_python装饰器的简单示例

    这篇文章主要为大家详细介绍了python装饰器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 装饰器的语法以 ...

  9. python的简单编程-python入门脚本的简单示例

    编程之家收集整理的这篇文章主要介绍了python入门脚本的简单示例,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. 感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. ...

  10. python多线程爬虫实例-Python多线程爬虫简单示例

    python是支持多线程的,主要是通过thread和threading这两个模块来实现的.thread模块是比较底层的模块,threading模块是对thread做了一些包装的,可以更加方便的使用. ...

最新文章

  1. Line 923: Char 9: runtime error: reference binding to null pointer of type ‘int‘ (stl_vector.h)
  2. 全国计算机等级考试题库二级C操作题100套(第09套)
  3. 列名 userid 不明确。 表结构_那些你不知道的表结构设计思路
  4. git checkout 单个文件_IntelliJ IDEA下的使用 Git
  5. 字体大宝库:设计师必备的专业免费英文字体
  6. IIC软件模拟-读写EEPROM
  7. 数据集永久下架,微软不是第一个,MIT 也不是最后一个
  8. VScode单步跟踪Nginx(虚拟机中搭建Nginx)源码
  9. 小程序 video 控制器外观调整_Kessil 360X Tuna Sun无线控制器使用分享
  10. html+js实现分页功能
  11. 自然语言处理——基于预训练模型的方法——第1章 绪论
  12. android 安装在笔记本,笔记本电脑怎么装安卓系统_笔记本安装安卓教程-系统城...
  13. 徒步运动软件怎么申请测试,徒步,不仅是体质健康的锻炼和检测,还是心理健康成长的过程...
  14. debug——程序停止正常工作
  15. Android WIFI 分析
  16. Andriod1.0无法被识别,更新为安卓 ADB 驱动
  17. 单片机循迹车c语言程序,基于单片机控制的简易自动循迹小车仿真与程序源码...
  18. java面向对象与面向过程的区别
  19. 大唐杯比赛辅导,国一选手
  20. 小说里的编程 【连载之十七】元宇宙里月亮弯弯

热门文章

  1. 【游戏开发创新】Unity狗屁不通文章生成器阐述点赞的意义,可生成文字长图保存到本地(Unity | 附源码 | Text转Texture长图 | 详细教程)
  2. python与vb可以互换吗_VB转换为Python:在线把VB代码转为Python
  3. 汇编Dos下16位输入输出io.inc
  4. VIIRS和DMSP夜间灯光数据(1992-2020)
  5. SQL数据库学习心得
  6. 学子商城代码2(项目 第十六阶段)
  7. QT -- UdpSocket通信实例,使用Qt的UDP通信协议,实现局域网组播通信软件功能
  8. eval('{kkk:{}}')出错,eval('{}')与eval('var ss = {kkk:{}}')正常
  9. 教你如何不登陆复制CSDN代码
  10. 编程之美(The beauty of programming)