用遗传算法找函数最大值!手把手教你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实现遗传算法求函数最值问题。

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4591

遗传算法及python实现

遗传算法及python实现

qq_54543084的博客 8562

数仓项目6.0(一)

数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、update以及delete操作)的实时流式同步工具。DataX的使用,用户只需根据数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

qq_58551342的博客 2848

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

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

RSociopath的博客 1万+

读取rosbag中的IMU信息并转为tum格式的csv和txt

rostopic -b xx.bag -p /xx > xxx.txt #for euroc structvio import os, sys,re,csv name="street_07" # basedir="/media/yinjie/2498AF1F98AEEF0C/adataset/15results/imu_bagtxt/"+name+'.txt' # txtdir="/media/yinjie/2498AF1F98AEEF0C//adataset/15results/imu_o

qq_42928559的博客 1919

windows中通过docker部署LocateAnything-3B模型

windows中通过docker部署LocateAnything-3B模型

yilvyangguang520的博客 485

遗传算法详解及代码实现

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

qq_41230076的博客 9万+

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频)

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频链接)

weixin_46713695的博客 1万+

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

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

闷声小发财的博客 4088

手把手教你学Simulink——基于全桥 LLC 谐振变换器的双向 DC-DC 建模与仿真

本文详细介绍了基于Simulink的双向全桥LLC谐振变换器建模与仿真方法。内容涵盖:1)LLC谐振变换器背景与双向化挑战;2)系统架构设计及关键数学推导(FHA增益分析、双向控制逻辑);3)Simulink建模步骤(功率级搭建、PWM生成、同步整流实现);4)仿真结果分析(正向/反向工作验证、ZVS特性);5)工程实践建议(增益微调、代码生成与HIL测试)。通过手把手教学,帮助读者掌握950V↔48V双向LLC变换器的完整设计流程,实现高效率能量双向流动的同时保持软开关特性,适用于储能系统、车载充电等应用

MHD0815的博客 179

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪(中)

本文使用的数据集为欧空局(European Space Agency, ESA)提供的Sentinal-1 数据集,Sentinel-1是欧洲“哥白尼计划”的SAR卫星机群,主要是用于陆地和海 洋服务的极地轨道全天候昼夜雷达成像任务[ 34]。Sentinel-1A于2014年4月3日发 射升空,Sentinel-1B于2016年4月25日发射升空,每颗卫星都携带C波段SAR, 共同提供地球表面的全天候、昼夜图像。

qq_36130719的博客 356

遗传算法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万+

uniapp - 解决 uni.chooseImage 在苹果 IOS 真机上点击没反应的问题,苹果手机点击 uni.chooseImage方法不生效,也不报任何错误(解决苹果ios系统点击无效问题)

uniapp小程序h5网页苹果ios系统点击uni.chooseImage不执行点击无效,uniapp使用uni.chooseImage方法点击没反应怎么办,uniappuni.chooseImage在ios苹果手机运行点击不触发,uniappuni.chooseImage苹果ios系统点击无效,uniapp项目ios端云打包之后uni.chooseImage不生效了,uniapp打包之后uni.chooseImage()无法打开相机,uniapp苹果手机无法打开相机和相册,uniapp网页h5微信支

🏆 前端领域优质创作者 1万+

遗传算法的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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

遗传算法求解函数最大值

用现代化的算法解决问题

Monstor_987的博客 4945

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 深入浅出:揭秘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、付费专栏及课程。

余额充值