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

二元交叉熵:分类模型概率校准的数学根基

二元交叉熵(BCE)是二分类任务中实现概率校准的核心损失函数,其本质源于最大似然估计与KL散度,确保模型输出具备真实可解释的概率意义。相比均方误差(MSE)或Hinge Loss,BCE强制优化预测分布与真实伯努利分布之间的信息差异,使p=0.8真正对应约80%的正例发生率,支撑风控、医疗、推荐等高信度场景的阈值决策。它不只影响训练收敛,更决定部署后概率的业务可信度——这正是Focal Loss等变体无法替代其基础地位的根本原因。理解BCE,就是理解分类模型如何从‘打分器’进化为‘概率契约签署者’。

congli3478的博客 1335

遗传算法及python实现

遗传算法及python实现

qq_54543084的博客 8562

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1063

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

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

RSociopath的博客 1万+

基于yolo11的BGA图像目标检测

15.YOLOv8的n/s版本(如YOLOv8n-1280),或通过TensorRT量化压缩模型。3.使用自适应batch_size(如根据GPU显存动态调整),推荐16-32。为采集分辨率整数倍(如原图2592×1944,训练时缩放为640×480),保持宽高比。14.采用余弦退火学习率(cos_lr)和早停(patience=50),防止过拟合。1.模型标注后,少量标注全部人工校验,大量数据抽检,部分人工检验。13.部署模型后持续收集困难样本(如模棱两可的预测结果),定期迭代更新模型。

qq_47798402的博客 1205

EtherCat 从站开发中遇到的问题分享

EtherCat从站 AX58100

yu_arius的博客 2058

遗传算法详解及代码实现

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

qq_41230076的博客 9万+

Anolis OS 23实战:5分钟搞定AI环境配置(含NVIDIA驱动一键安装)

本文详细介绍了如何在Anolis OS 23上快速配置AI开发环境,包括NVIDIA驱动的一键安装和TensorFlow、PyTorch等AI框架的部署。通过智能硬件适配引擎和优化后的二进制包,用户可在5分钟内完成传统需要数小时的配置工作,显著提升AI项目开发效率。

weixin_30335575的博客 536

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

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

闷声小发财的博客 4088

win11一直弹出用户账户控制怎么解决

用户帐户控制简称UAC,是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。近期有部分Win11用户想要关闭UAC,但是不知道应该如何操作,对此下面我就教给大家操作方法,大家可以去尝试看看。...

xitongzhijia_abc的博客 5万+

Open3D 基于法线的双边滤波

基于法线的双边滤波是一种用于点云平滑的技术,它结合了点与其邻域点之间的几何距离和法线方向的相似性,从而在去除噪声的同时保留几何特征。这种滤波方法广泛应用于点云处理领域,尤其是在需要保留表面细节和边缘的场景中。

纵马踏花向自由 2500

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

为Ollama本地大模型添加持久化记忆层:openclaw-ollama-memory项目详解

在构建基于大型语言模型(LLM)的对话应用时,上下文管理是核心技术挑战之一。其原理在于模型本身不具备跨会话的持久化记忆能力,每次请求都是独立的。这导致在多轮对话中,模型无法有效利用历史信息,用户体验割裂。从技术价值看,独立的记忆层通过解耦推理与存储,能突破模型固定上下文窗口的限制,实现更智能、连贯的交互。其核心应用场景包括聊天机器人、智能助手及需要长期记忆的复杂代理。本文聚焦的 openclaw-ollama-memory 项目,正是为 Ollama 生态提供的记忆层解决方案,它通过向量检索和智能摘要等机制

weixin_42521558的博客 312

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

遗传算法求解函数最大值

用现代化的算法解决问题

Monstor_987的博客 4945

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

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

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

余额充值