遗传算法及其应用实现

使用遗传算法求解函数具有最大值的点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,一经查实,立即删除!

相关文章

论文浅尝 | 一种嵌入效率极高的 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)和…

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内存的系统级…

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

论文笔记整理&#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;DI数据智能。 Learning to Complete Knowledge Graphs with Deep Sequential Models作者&#xff1a;郭凌冰、张清恒、胡伟、孙泽群、瞿裕忠单位&#xff1a;南京大学供稿&#xff1a;胡伟引用L. Guo, Q. Zhang, W. Hu, Z. Sun, & Y. Qu. …

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

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

LeetCode 20. 有效的括号(栈)

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

消息中间件系列(八):Kafka、RocketMQ、RabbitMQ等的优劣势比较

在高并发业务场景下&#xff0c;典型的阿里双11秒杀等业务&#xff0c;消息队列中间件在流量削峰、解耦上有不可替代的作用。 之前介绍了MQ消息队列的12点核心原理总结&#xff0c;以及如何从0到1设计一个MQ消息队列&#xff0c;以及RPC远程调用和消息队列MQ的区别 今天我们一…

论文浅尝 | 一种用于多关系问答的可解释推理网络

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;COLING 2018链接&#xff1a;https://www.aclweb.org/anthology/C18-1171问题背景与动机多关系问答&#xff08;multi-relationquestion answering&#…

蚁群优化算法 ACO

群体智能&#xff08;swarm intelligence&#xff09; 定义&#xff1a; 由单个复杂个体完成的任务可由大量简单个体组成的群体合作完成&#xff0c;而后者往往更具有健壮性、灵活性等优势。在没有集中控制&#xff0c;不提供全局模型的前提下&#xff0c;为寻找复杂问题解决…

量化投资交易 vn.py

前言&#xff1a;当初接触到vnpy&#xff0c;一开始当然是按照该项目在GitHub上的指南&#xff0c;开始安装&#xff0c;配置&#xff0c;阅读Wiki&#xff0c;但是作为一个python新手&#xff0c;并不能马上利用vnpy来写策略回测甚至实盘。所以我决定还是从源码看起&#xff0…

掌握神经网络,我应该学习哪些至关重要的知识点?

人工智能作为计算机科学领域的一个分支&#xff0c;在互联网和大数据的时代浪潮中显现出其巨大的潜力和蓬勃的活力&#xff0c;类似电子医生、无人驾驶等新名词纷纷涌现。人工智能凭借着它无与伦比的发展优势&#xff0c;推动了各大产业和技术的革命与创新&#xff0c;使得生产…