使用遗传算法求解函数具有最大值的点X

"""
Visualize Genetic Algorithm to find a maximum point in a function.
"""
import numpy as np
import matplotlib.pyplot as pltDNA_SIZE = 10  # DNA length
POP_SIZE = 100  # population size
CROSS_RATE = 0.8  # mating probability (DNA crossover)
MUTATION_RATE = 0.003  # mutation probability
N_GENERATIONS = 200  # stop evolution rule
X_BOUND = [0, 5]  # x upper and lower bounds# to find the maximum of this function
def F(x):return np.sin(10 * x) * x + np.cos(2 * x) * x# 适应性函数(一个值域非负、与F有相同极值点的函数)
def get_fitness(pred):return pred + 1e-3 - np.min(pred)# 选择算子(适者生存,不适者遭淘汰)
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)  # select another individual from popcross_points = np.random.randint(0, 2, size=DNA_SIZE).astype(np.bool)  # choose crossover pointsparent[cross_points] = pop[i_, cross_points]  # mating and produce one childreturn 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# 将二进制的DNA转换为实数并且标准化到[0, 5]
def translateDNA(pop):return pop.dot(2 ** np.arange(DNA_SIZE)[::-1]) / float(2 ** DNA_SIZE - 1) * X_BOUND[1]
# np.arange(5)[::-1] 逆序:[4 3 2 1 0]
# 2 ** np.arange(5)[::-1]  幂次:[16  8  4  2  1]
# pop.dot(2 ** np.arange(5)[::-1])  进制转换:二进制DNA转换为十进制数
# float(2 ** DNA_SIZE - 1) 最大十进制数:31=[16+8+4+2+1]
# pop.dot(2 ** np.arange(DNA_SIZE)[::-1]) / float(2 ** DNA_SIZE - 1) * X_BOUND[1]  将X范围缩放到:[0, 5]pop = np.random.randint(2, size=(POP_SIZE, DNA_SIZE))  # 初始化DNA
# [[1 0 1 1 0 0]
#  [0 1 1 1 0 0]
#  [1 0 0 1 1 1]]
plt.ion()  # something about plotting
x = np.linspace(*X_BOUND, 200)
plt.plot(x, F(x))for _ in range(N_GENERATIONS):F_values = F(translateDNA(pop))  # compute function value by extracting DNA# something about plottingif '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)# GA part (evolution)fitness = get_fitness(F_values)print("Most fitted DNA: ", pop[np.argmax(fitness), :])pop = select(pop, fitness)pop_copy = pop.copy()for parent in pop:child = crossover(parent, pop_copy)child = mutate(child)parent[:] = child  # 自然选择(另外还有“父子混合选择”策略)print("the X: ", translateDNA(pop[np.argmax(fitness), :]))  # 具有最高点的X值plt.ioff();
plt.show()

遗传算法及其应用实现相关推荐

  1. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  2. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  3. 遗传算法与C++实现

    https://blog.csdn.net/b2b160/article/details/4680853/ https://blog.csdn.net/ljp1919/article/details/ ...

  4. 在遗传算法中出现等式约束_排序算法中的稳定性-等式的处理

    在遗传算法中出现等式约束 by Onel Harrison 通过Onel Harrison 排序算法中的稳定性-等式的处理 (Stability in Sorting Algorithms - A T ...

  5. 2018-4-8使用兔子的例子对比说明遗传算法,局部搜索,禁忌搜索,模拟退火方法

    文章的来源: [图文]智能优化算法_数学建模_王成章_模拟退火法_2011_百度文库 https://wenku.baidu.com/view/335c56e94afe04a1b071de13.htm ...

  6. 2018-4-7 进化类算法------1、遗传算法(GA)

    学习资料<智能优化算法及其Matlab实例> 包子阳   余继周    编著 第二章遗传算法: 1.遗传算法:就是借鉴达尔文以及孟德尔的进化理论,而创造的一种模拟自然生物进化的算法.它的本 ...

  7. 2018-3-27 遗传算法中的轮盘赌

    原出处:http://my.oschina.net/u/1412321/blog/192454 一.遗传算法的应用 函数优化(遗传算法的经典应用领域): 组合优化(实践证明,遗传算法对于组合优化中的N ...

  8. 2018-3-14(论文-优化问题的智能算法及其哲学内涵)笔记二(智能算法与人类智能以及遗传算法与生物进化对比)

    随机优化技术: 20世纪60年代人们开始尝试在计算机上模仿生物进进化过程而发展处随机优化技术,解决传统的优化算法难以解决的复杂问题.我们将学习自然界各类生物进化的特点,创造和构建的求解优化问题的方法称 ...

  9. 基于Matlab的神经网络结合遗传算法在非线性函数极值寻优中的应用

    本微信图文利用神经网络进行非线性函数数据的拟合并通过遗传算法对训练后的神经网络进行非线性函数极值寻优.

  10. 基于Matlab的遗传算法优化BP神经网络在非线性函数拟合中的应用

    本微信图文详细介绍了遗传算法优化BP神经网络初始权值阈值的过程,并通过实例说明该优化能够提升BP神经网络的预测精确程度.

最新文章

  1. AWS — Nitro System
  2. C#枚举类型和结构体
  3. 利用ASP.NET2.0向导控件一步步建立与用户的交互--------提高和自定义用户体验
  4. linux自动锁屏命令_如何冻结和锁定你的Linux系统?
  5. unity editor下选中GameObject粘贴复制pos信息
  6. # 睡眠3秒_【for fun】睡眠排序算法
  7. 中科大开源镜像使用帮助列表
  8. 域名解析服务之DNS查询类型
  9. 配送A/B评估体系建设实践
  10. MooseFS学习-概述
  11. 单片机modbus rtu通讯_Modbus-RTU通讯
  12. JAVA:二进制和十进制互转
  13. 博弈论 从懵逼到入门 详解
  14. 重磅!2021年国内Java培训机构排名前十最新出炉啦
  15. 关于:Table '项目名称..hibernate_sequence' doesn't exist的解决方法
  16. 33种名车的标志及名称来历
  17. 【产品】 产品设计:工业设计之外观设计详解(形态设计和CMF设计)
  18. 创业公司该如何设计激励员工的期权池
  19. 数据治理:数据质量管理策略!
  20. rsync大批量删除文件

热门文章

  1. Linux/Windows系统内核性能调优
  2. 常见单元测试工具介绍
  3. 为什么一个字节定义成8位?
  4. 空间换时间,查表法的经典例子
  5. C语言、嵌入式中几个非常实用的宏技巧
  6. STM32CubeMx官网下载HAL库文档资料
  7. MATLAB —— 绘图
  8. string contains不区分大小写_String基础复习
  9. python语法基础知识案例_Python 语法速览与实战清单
  10. 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集