遗传算法及其应用实现

使用遗传算法求解函数具有最大值的点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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 判断一个点(坐标)是否在一个多边形内利用射线法

看了一篇博客写的用射线法判断一个经纬度点是否在一个多边形的内部的方法 经验证可行所以拿来用作备份: class Point:lng lat def __init__(self, lng, lat):self.lng lngself.lat lat求外包矩形 def get_polygon_bounds(points):length len(points)top down left ri…

论文浅尝 | 一种嵌入效率极高的 node embedding 方式

论文笔记整理&#xff1a;叶群&#xff0c;浙江大学计算机学院&#xff0c;知识图谱、NLP方向。会议&#xff1a;WSDM 2019链接&#xff1a;https://dl.acm.org/citation.cfm?id3290961Motivation基于spring-electrical的模型在网络可视化中取得了非常成功的应用&#xff0c;一…

重要的,是那些训练中被多次遗忘的样本

文 | kid丶源 | 知乎编 | 兔子酱今天跟大家分享一篇很有意思的文章&#xff0c;是一篇探讨深度学习模型记忆&遗忘机制的文章&#xff0c;是一篇角度很新颖的题材&#xff0c;同时又有一定启发作用。这篇文章发表在深度学习顶会ICLR19&#xff0c;标题是《An empirical stud…

直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景

直通BAT之JVM系列 直通BAT必考题系列&#xff1a;JVM的4种垃圾回收算法、垃圾回收机制与总结 直通BAT必考题系列&#xff1a;深入详解JVM内存模型与JVM参数详细配置 今天继续JVM的垃圾回收器详解&#xff0c;如果说垃圾收集算法是JVM内存回收的方法论&#xff0c;那么垃圾收集…

模拟嫁接技术

模拟嫁接技术&#xff1a;定义嫁接算子及策略剪接算子及策略GPOGA算法总结定义 收益和代价 对一棵生成树 T1&#xff0c;若将某结点的一条分枝移至另一结点作为其一条分枝后产生的生成树为 T2&#xff0c;考察分枝移动前后生成树的边长和的变化&#xff0c;则定义收益(gain)和…

python 之pyecharts画图:最全地图,词云图,世界地图,省份图,区县图

python最全画地图&#xff0c;可视化数据&#xff0c;pyecharts画图: https://www.jianshu.com/p/e0b2851672cd Python强大的pyecharts绘画优美图形<二>:https://www.jianshu.com/p/96fe420ddd76 pyecharts绘画优美图形<三>&#xff1a;仪表盘 - 漏斗图 - 关系图 …

HuggingFace又出炼丹神器!稀疏矩阵运算进入平民化时代!

文 | rumor酱编 | YY一提到模型加速&#xff0c;大家首先想到的就是蒸馏、&#xff08;结构性&#xff09;剪枝、量化&#xff08;FP16&#xff09;&#xff0c;然而稀疏矩阵&#xff08;sparse matrix&#xff09;运算一直不被大家青睐。原因也很简单&#xff0c;一是手边没有…

章乐焱 | 用“科技”监管“科技”,知识图谱能做什么?

本文转载自公众号&#xff1a;恒生技术之眼。人工智能、大数据等前沿科技的爆发&#xff0c;推动金融科技进入了一个崭新的时代&#xff0c;也成为监管科技发展的重要推动力。在这个Fintech的黄金时代&#xff0c;前沿科技正在如何赋能监管&#xff1f;这方面&#xff0c;恒生公…

LeetCode 23. 合并K个排序链表(优先队列)

文章目录1. 题目信息2. 思路3. 代码1. 题目信息 合并 k 个排序链表&#xff0c;返回合并后的排序链表。请分析和描述算法的复杂度。 示例:输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2->3->4->4->5->6来源&#xff1a;力扣&#xff08;…

直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解

JVM系列 直通BAT必考题系列&#xff1a;7种JVM垃圾收集器特点&#xff0c;优劣势、及使用场景 直通BAT必考题系列&#xff1a;JVM的4种垃圾回收算法、垃圾回收机制与总结 直通BAT必考题系列&#xff1a;深入详解JVM内存模型与JVM参数详细配置 JVM内存调优 对JVM内存的系统级…

mysql匹配字符

1.正确的方式&#xff1a; 判断字段field_A中是否包含23: select * from table_test where FIND_IN_SET("23", field_A) ;2.错误的方式&#xff1a; select * form table_test where field_A like "%23%"*****3.案例分析&#xff1a; field_A字段&#…

论文浅尝 | 知识图谱三元组置信度的度量

论文笔记整理&#xff1a;叶橄强&#xff0c;浙江大学计算机学院&#xff0c;知识图谱和知识推理方向。https://arxiv.org/pdf/1809.09414.pdf动机在构建知识图谱的过程中&#xff0c;不可避免地会产生噪声和冲突。基于知识图谱的任务或应用一般默认假定知识图谱中的知识是完全…

跟小伙伴们做了个高效刷论文的小站

好久木有在知乎冒泡了&#xff0c;不知道还能不能出现在大家的timeline上哇QAQ正文开始之前还是先习惯性的碎碎念一下。前段时间换了研究方向&#xff0c;重新pick了问答和检索&#xff0c;为了追上相关问题的最新进展&#xff0c;就顾不上写文的刷了一堆paper&#xff0c;加上…

模拟进化与遗传算法

遗传算法是目前研究得最为广泛的一类模拟进化算法。 假定考虑全局优化问题&#xff08;P&#xff09;。遗传算法基于以下两条基本策略求解问题&#xff1a; 对于给定的目标函数F&#xff0c;它使用&#xff26;的任一适应性函数&#xff08;换言之&#xff0c;一个值域非负、…

消息中间件系列(六):什么是流量削峰?如何解决秒杀业务的削峰场景

流量削峰的由来 主要是还是来自于互联网的业务场景&#xff0c;例如&#xff0c;马上即将开始的春节火车票抢购&#xff0c;大量的用户需要同一时间去抢购&#xff1b;以及大家熟知的阿里双11秒杀&#xff0c; 短时间上亿的用户涌入&#xff0c;瞬间流量巨大&#xff08;高并发…

优化器

机器学习面试之各种优化器的比较 机器学习&#xff1a;各种优化器Optimizer的总结与比较

论文浅尝 | 基于深度序列模型的知识图谱补全

本文转载自公众号&#xff1a;DI数据智能。 Learning to Complete Knowledge Graphs with Deep Sequential Models作者&#xff1a;郭凌冰、张清恒、胡伟、孙泽群、瞿裕忠单位&#xff1a;南京大学供稿&#xff1a;胡伟引用L. Guo, Q. Zhang, W. Hu, Z. Sun, & Y. Qu. …

Pandas DataFrame数据的增、删、改、查

Pandas DataFrame数据的增、删、改、查https://blog.csdn.net/zhangchuang601/article/details/79583551?depth_1-

拨开算力的迷雾:聊聊不同 GPU 计算能力的上限

文 | 卜居知乎编 | 兔子酱通过深入了解自己手头 GPU 的计算能力上限&#xff0c;能够在买新卡时做出更理性判断。本文深入GPU架构&#xff0c;重点介绍了其中的ampere架构。另外&#xff0c;作者还对比了不同GPU之间的峰值计算能力&#xff0c;增加读者对硬件资源的了解。前言2…

LeetCode 20. 有效的括号(栈)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括…