用遗传算法找函数最大值!手把手教你Python实现(附完整代码)

【遗传算法GA】--计算函数最值(Python) 文章目录1.遗传算法概述2.分步实现过程3.完整Python代码4.结果截图 1.遗传算法概述 对于遗传算法:遗传算法是一种用于解决最优化的搜索算法,也是进化算法的一种。取名遗传就是因为它借鉴了生物学中的一些概念,比如说遗传、变异、自然选择以及杂交等等。 对于个体:遗传算法中的个体可以抽象为染色体,然后使得种群向更好的方向进化。一般来说,染色体可以用一系列0和1的串来表示,通常使用的也就是二进制表示法。 对于进化:首先生成随机个体构成的种群,然后每个个体都有自己的适应度,基于适应度随机选择多个个体,然后通过 阅读详情

一、这个数学题居然用生物进化来解?

咱们先来看这个经典问题:y = x² 在区间[-10,10]找最大值。正常解法求导找极值点?那太没意思了!(拍桌)今天玩个大的——用遗传算法模拟生物进化来找答案!

遗传算法的神奇之处在于,它把数学问题转化成了生存游戏。想象一群数字生物在解空间里游荡,强的活下来繁衍后代,弱的被淘汰,经过N代进化后,最终找到最优解!

二、算法核心六步走(必考知识点)

  1. 种群初始化:随机生成20-100个初始解(别太少!)
  2. 二进制编码:把实数转成二进制,比如5→0101(注意编码长度影响精度)
  3. 适应度计算:每个解的y值就是它的分数,y越大越优秀
  4. 选择交配:轮盘赌选父母,概率=个体适应度/总适应度
  5. 染色体交叉:随机选交叉点交换基因片段(推荐单点交叉)
  6. 基因变异:按1%-5%概率翻转某个bit(变异率别太高!)

举个🌰:假设初始解是3(0011)和5(0101),交叉后可能变成0011和0101,变异可能变成0010

三、Python代码逐行解析

import random
import matplotlib.pyplot as plt

# 目标函数(这里可以替换成任何函数!)
def target_function(x):
    return x ** 2

# 二进制转十进制(注意精度调节)
def decode(binary, lower=-10, upper=10, bit_length=16):
    int_val = int(''.join(map(str,binary)),2)
    return lower + (upper - lower) * int_val / (2**bit_length -1)

# 生成随机个体
def create_individual(bit_length):
    return [random.randint(0,1) for _ in range(bit_length)]

# 交叉操作(这里使用单点交叉)
def crossover(parent1, parent2):
    point = random.randint(1,len(parent1)-2)
    return parent1[:point]+parent2[point:], parent2[:point]+parent1[point:]

# 变异操作(随机翻转一个bit)
def mutate(child):
    index = random.randint(0,len(child)-1)
    child[index] ^= 1
    return child

# 主程序
population_size = 50
generations = 100
bit_length = 16
mutation_rate = 0.01
history = []

# 初始化种群
population = [create_individual(bit_length) for _ in range(population_size)]

for _ in range(generations):
    # 计算适应度
    fitness = [target_function(decode(ind)) for ind in population]
    history.append(max(fitness))
    
    # 选择
    selected = random.choices(
        population,
        weights=fitness,
        k=population_size
    )
    
    # 交叉变异
    new_population = []
    for i in range(0, population_size, 2):
        parent1 = selected[i]
        parent2 = selected[i+1]
        child1, child2 = crossover(parent1, parent2)
        
        if random.random() < mutation_rate:
            child1 = mutate(child1)
        if random.random() < mutation_rate:
            child2 = mutate(child2)
            
        new_population.extend([child1, child2])
    
    population = new_population

# 可视化进化过程
plt.plot(history)
plt.title('进化轨迹(最大值变化曲线)')
plt.xlabel('Generation')
plt.ylabel('Max Value')
plt.show()

四、调参进阶技巧(血泪经验)

  • 种群数量:20-200之间,太大会降低效率,太小容易早熟
  • 变异率:0.5%-5%是黄金区间(超过10%就成随机搜索了!)
  • 编码长度:16位精度可达0.0003,32位精度更高但更耗内存
  • 精英保留:每代保留前5%最优个体不参与交叉变异(防退化)

五、常见坑点预警!!

  1. 早熟收敛:所有个体都一模一样?快检查变异率是不是太低了!
  2. 收敛过慢:尝试增大选择压力(比如用锦标赛选择代替轮盘赌)
  3. 精度不够:把二进制编码长度从16位提到32位试试
  4. 负数处理:记得在解码时转换数值范围(比如-10到10)

六、效果展示与扩展

运行代码后你会看到,算法在约30代时就找到了接近100的最大值(实际理论最大值是10²=100)。如果把目标函数改成其他复杂函数(比如sin(x)+cos(2x)),只需要修改target_function即可!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

七、还能怎么玩更刺激?

  • 多峰值函数:试试y = x + 10sin(5x) +7cos(4x),看算法能否找到全部极值
  • 动态环境:让目标函数随时间变化,考验算法的实时追踪能力
  • 多目标优化:同时优化多个目标函数(需要引入Pareto最优解)

八、为什么选遗传算法?

比起梯度下降等传统方法,它有三大优势:

  1. 不需要目标函数可导(黑箱优化也OK!)
  2. 全局搜索能力强(不易陷入局部最优)
  3. 并行性好(种群中的个体可以同时进化)

下次遇到复杂优化问题,别急着求导,试试让计算机帮你"进化"出一个最优解吧!记得调参时多试几次,遗传算法有时候也看"运气"呢~(笑)

遗传算法Python代码实现 1. 遗传算法的科学定义 ​ 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 ​ 其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向。 ​ 遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选 阅读详情

相关推荐

遗传算法详解 附python代码实现

遗传算法 遗传算法是用于解决最优化问题的一种搜索算法。从名字来看,遗传算法借用了生物学里达尔文的进化理论:”适者生存,不适者淘汰“,将该理论以算法的形式表现出来就是遗传算法的过程。 问题引入 上面提到遗传算法是用来解决最优化问题的,下面我将以求二元函数: def F(x, y): return 3*(1-x)**2*np.exp(-(x**2)-(y+1)**2)- 10*(x/5 - x**3......

ha_ha_ha233的博客 22万+

遗传算法 python

【代码】遗传算法 python。

知识搬运者 4072

【Python】遗传算法求解二元函数最值

序言 遗传算法算是我接触最早的优化算法了,之前大学建模竞赛时学习过,不过当时云里雾里始终没明白其中的原理机制,如今朝花夕拾,看了些博客,又自己动手试了试,总算解决了曾经的困惑。 这里主要参考了(https://blog.youkuaiyun.com/ha_ha_ha233/article/details/91364937)的思路,该博主文章写的通俗易懂,建议大家有兴趣的去看看。 我本身不太会Python,借这次机会除了复习遗传算法,也是为了学习Python语法,故我在代码中添加了大量注释,以供同样和我基础薄弱的同学参考

includei的博客 1万+

【人工智能】实验四:遗传算法求函数最大值实验与基础知识

采用遗传算法求解函数最大值。

记录我的学习历程 1万+

用遗传算法求函数最大值(python)

用遗传算法求函数最大值(python) 1.可视化函数(用pyecharts) (pyecharts是 国人开发的数据可视化神库!!!) 2.求函数的最大值(用遗传算法) 1: 可视化函数 没有安装pyecharts的先打开命令行输入下列命令: pip install pyecharts 把官方文档https://pyecharts.org里的demo拿来修改一下即可: 实际上需要我们编写的只有create_data()这个函数! 代码如下: import numpy as np import pye

yyyyypppppzzzzz的博客 2586

遗传算法与其python实现

遗传算法(Genetic Algorithm)和模拟退火算法一样,也是搜索启发式算法的一种,它是借鉴了自然界优胜劣汰与适者生存的思想,通过模拟自然界这一过程来搜索最优解,在机器学习、组合优化等方面有广泛的用途。 首先我们一样来看一个函数: f(x)=x+5sin5x+2cos3xf(x)=x+5sin5x+2cos3xf(x)=x+5sin{5x}+2cos{3x} 函数图像如下: ...

WFRainn的博客 2万+

遗传算法详解python代码实现以及实例分析

遗传算法 文章目录遗传算法前言一、遗传算法是什么?二、实例讲解例题11.初始化种群2.优胜劣汰3.根据优胜劣汰的结果,交配生殖、变异5.生物遗传进化例题21.初始化参数1.定义环境(定义目标函数)2.DNA解码(计算x,y)3 .初始化种群(初始化解,考虑定义域)4 .计算适应度(计算误差,考虑定义域)4 .适者生存(挑选误差最小的答案)5 .生殖、变异(更改部分二进制位,取反部分二进制位,可能生成误差更小的答案)6 .查看最终的答案7 .生物遗传进化8 .完整代码总结 前言 因为老师布置作业,需要我们

学习笔记 2万+

新实验五 人工智能之遗传算法求解函数最大值.rar

该资源主要是对于人工智能当中一个经典课题--遗传算法求解函数最大值,其中包含对于该算法的C#代码实例,并且可以直接在visual studio运行,有需要的欢迎下载!!

Python—标准遗传算法求函数最大值代码实现

参考资料《智能优化算法及其matlab实例第二版》 第一次写博客,格式什么的不太清楚,大家见谅。 遗传算法 学习过程中,为了加深自己理解,在matlab源码的基础上采用Python进行改写,功能一致,对其实现过程进行了修改。个人认为这个版本的代码对初学者更为友好。 遗传算法的基本概念本文不予介绍,只给出实现代码。 直接附上代码,代码复制后可以直接运行。 import numpy as np import matplotlib.pyplot as plt # import math as mt

weixin_43210097的博客 6655

利用Python实现遗传算法求函数最值

遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容,此程序利用Python实现遗传算法求函数最值问题。

Python+Seaborn可视化:双因素方差分析结果这样呈现更专业

本文详细介绍了如何利用Python中的Seaborn和statsmodels库,专业地执行并可视化双因素方差分析结果。通过模拟实验数据,演示了从模型构建、统计检验(包括交互作用分析)到诊断验证的全流程。重点展示了如何使用Seaborn绘制交互效应图、组合分布图及热图,将复杂的统计结果转化为直观、富有洞察力的可视化图表,助力科研论文与商业报告的专业呈现。

weixin_29274969的博客 137

遗传算法及python实现

遗传算法及python实现

qq_54543084的博客 8562

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储1 、分布式存储的兴起2 、分布式存储的重要性3 、分布式存储的种类和比较三、分布式理论浅析1 、一致性和可用性2 、数据分布3 、复制4 、分布式协议5、跨机房部署四、分布式文件系统1、 Google 文件系统( GFS )2、 Taobao 文件系统( TFS )3、 Fackbook Haystack 文件系统4、 CDN 内容分发网络五、分布式键值系统1、 Amazon Dynamo2、 Taobao Tiar3、 ETCD4 、产品选型比较( Etcd , Zoo

weixin_70730532的博客 2万+

遗传算法(Genetic Algorithm, GA)详解及其Python代码实现

遗传算法即是通过不断迭代来寻求最优解的一种过程,将次解淘汰,优解保留并重新进行迭代,在一次次计算中,不断地趋近(不是等于)最优解的算法。

RSociopath的博客 1万+

基于Landsat-8数据的山西省吕梁市地表温度反演研究过程(大气校正法)

1.数据下载:本实验采用的数据是 ①从地理空间数据云下载的来自landsat8 卫星,云量<=1%,时间为2017年5月12日的山西省吕梁市影像数据。为全面覆盖吕梁市,选用了两片影像。 ②吕梁市边界矢量图 2.数据预处理 ...

weixin_45747376的博客 6601

DLMS—Cryptographic algorithms—(Green-Book)加密算法

密码学是数学的一个分支,基于数据的转换,并且可以用来提供多种安全服务:保密性、数据完整性、认证、授权和不可否认性。密码学依赖于两个基本组成部分:算法(或密码学方法)和密钥。算法是一个数学函数,而密钥是在转换过程中使用的参数。密码算法和密钥用于对数据应用密码保护(例如,加密数据或生成数字签名),以及移除或检查保护(例如,解密加密的数据或验证数字签名)。密码哈希函数:这类函数不需要密钥(尽管它们可以以使用密钥的模式使用)。哈希函数通常用作算法的一个组成部分,以提供安全服务。见9.2.3.2节。对称密钥算法。

一个bug是bug,多个bug能work 1709

遗传算法详解及代码实现

遗传算法定义相关术语交叉变异产生子代完整过程遗传算法应用问题的提出与解决方案“袋鼠跳”问题爬山法(最速上升爬山法)模拟退火遗传算法遗传算法实现过程遗传算法的一般步骤遗传算法图解进化细节编码方法二进制编码浮点编码法符号编码法袋鼠染色体编码评价个体的适应度--适应度函数(fitness function)射杀一些袋鼠--选择函数(selection)遗传--染色体交叉(crossover)变异--基因突变(Mutation) 定义 遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计

qq_41230076的博客 9万+

Vivado实战:AXI转PCIe IP核配置全流程(含性能优化技巧)

本文详细介绍了在Vivado环境中配置AXI转PCIe IP核的全流程,包括工程准备、IP核参数设置、BAR空间配置、中断系统优化以及TLP传输效率提升等关键步骤。特别分享了经过验证的性能优化技巧,帮助开发者显著提升PCIe链路的吞吐量和稳定性,适用于视频采集、高速数据记录等应用场景。

weixin_30892037的博客 552

Python遗传算法求一元函数最大值

Python遗传算法求一元函数最大值最近开始学习遗传算法,看了些例子,感觉有些也不尽全对,遂又参考了更多,写了下新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML...

闷声小发财的博客 4088

【智能优化算法】2024年SCI鳗鱼-石斑鱼优化算法(EGO),含MathType公式、word伪代码、visio流程图、matlab代码等。

该文中包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。 鳗鱼-石斑鱼优化算法(Eel and grouper optimizer ,EGO)是一种新型的元启发式算法(智能优化算法),灵感来源于海洋生态系统中鳗鱼和石斑鱼的共生作用和觅食策略。该成果由Ali Mohammadzadeh和Seyedali Mirjalili两位作者于2024年6月发表在SCI著名期刊《Cluster Computing》上。

2301_79359347的博客 1042

【HALCON工业视觉应用探索】10. C#+Halcon 3D视觉实战:点云处理与三维测量工业指南(附完整代码与实操案例)

摘要:本文聚焦C#+Halcon在3D视觉领域的工业应用,从新手友好的“基础3D检测系统”切入,逐步深入“汽车铸件三维测量”等工业级场景。内容涵盖核心概念(点云数据结构、3D采集原理、坐标系统)、完整技术流程(数据采集→预处理→特征提取→三维测量→结果可视化)、工业级代码实现(多视角点云融合、微缺陷检测、高精度尺寸测量),以及现场落地关键技巧(硬件选型、标定流程、抗干扰优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2005

遗传算法python代码(附详细注释)

遗传算法python代码(附详细注释) #代码参考:https://blog.youkuaiyun.com/ha_ha_ha233/article/details/91364937 import numpy as np #用于数据操作:【X = np.linspace(*X_BOUND, 100) #将列表传入收集参数,完成解包】【 Y = np.linspace(*Y_BOUND, 100)】【X, Y = np.meshgrid(X, Y) #生成网格点坐标矩阵,每个二维矩阵表示一个维度】 import mat

wqy1837154675的博客 1万+

2025年上半年第1批信息系统项目管理师论文真题解析与范文

文章首先分析了项目经理在交付绩效域中应关注的重点领域,然后按照项目管理五大过程组顺序,阐述了各过程组中与交付绩效域协同的绩效域及协调目标,最后制定了各过程组中交付绩效域的测量指标。本项目的实践表明,系统化的交付绩效管理不仅能保证项目成功,还能创造超出预期的业务价值。需要结合具体项目案例,按照五大过程组(启动、规划、执行、监控、收尾)顺序,分析各过程组中与交付绩效域协同的其他绩效域及其协调目标。价值交付连续性:建立敏捷交付机制,将项目分解为12个迭代周期,每周期交付可验证成果,确保价值持续流动。

Programming Talk 822

遗传算法的Python实现(求解函数极值问题)

目录问题描述 问题描述 f(x)=x*sin(x)+1, x属于[0,2π] 以求解f(x)的最大值和最小值问题为 例,设计针对f(x)的遗传算法程序,然后进行运行求解 (1)确定基本功能:本实验是实现f(x)的最大值和最小值的求解。 (2)对f(x)进行编码:用一个二进制矢量表示一个染色体,由染色体来代表变量x的实数值。 (3)设计适应度函数:由于要求f(x)的最值,所以适应度函数就是f(x)。 (4)针对f(x)的设计并且实现遗传算法程序:遗传操作主要包括复制、交叉和变异。复制是直接将父代遗传给子

黑白的黒's Blog 9149

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

遗传算法求解函数最大值

用现代化的算法解决问题

Monstor_987的博客 4945

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 深入浅出:揭秘select/poll/epoll的终极对决(附真实踩坑实录)
下一篇: 手把手教你玩转Node.js环境搭建(附避坑指南)
echoarts
博客等级 码龄2年 87粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值