遗传算法实战:5步教你找到函数最大值!(附Python代码)

人工智能——遗传算法求函数最大值 题目描述: 运用遗传算法求解图中函数的最大值(约为38.8503…) 解决步骤: 1.确定编码方案——二进制编码,长度33位。 2.初始化种群:使用计算机在0~1之间产生随机数K,并按照数K的 值初始化基因位: 0≤K<0.5,基因为置为1,0.5≤K≤1,基因为置为0。得到33位的01序列字符串。 3.计算个体适应度,以maxf(x1,x2)为适应度函数,因所需求的值为最大值,适应度函数值越大... 阅读详情

一、这个算法有点意思!

大家有没有遇到过这样的情况——想找一个复杂函数的最高点,用常规方法试了半天就是找不到?(举个手让我看看🙋)今天要介绍的遗传算法(Genetic Algorithm),就像生物进化一样神奇,能帮我们找到函数的最优解!

先给大家看个例子:假设我们要找函数 f(x) = x² 在 [0,31] 区间的最大值。传统方法可能需要遍历所有整数,但遗传算法只需要几代"进化"就能找到正确答案!(后面会揭晓具体实现)

二、遗传算法的核心四步走

1. 编码:把问题装进DNA里

  • 二进制编码:把x值转成5位二进制(比如15→01111)
  • 重要技巧:编码长度决定精度,这里5位对应32种可能值
  • (新手注意!)编码方案直接影响算法效率

2. 初始种群:随机生成第一代

import random

def create_population(size):
    return [random.randint(0, 31) for _ in range(size)]

population = create_population(10)  # 初始10个个体

3. 选择:优胜劣汰的时刻到了!

  • 轮盘赌选择法:适应度高的个体有更大存活概率
def selection(population):
    fitness = [x**2 for x in population]
    total = sum(fitness)
    return random.choices(population, weights=fitness, k=len(population))

4. 交叉:基因交换产生新生命

  • 单点交叉:随机选个位置交换父母基因
def crossover(parent1, parent2):
    point = random.randint(1,4)
    mask = (0b11111 >> point) << point
    child1 = (parent1 & mask) | (parent2 & ~mask)
    child2 = (parent2 & mask) | (parent1 & ~mask)
    return child1, child2

5. 变异:给进化加点意外

def mutation(child):
    if random.random() < 0.1:  # 10%变异概率
        bit = 1 << random.randint(0,4)
        return child ^ bit
    return child

三、参数调校的三大黄金法则

  1. 种群数量:20-100是常用范围(太小容易早熟,太大计算慢)
  2. 变异概率:0.001-0.1之间(太高会破坏优秀基因)
  3. 停止条件的三种设置方式:
    • 固定迭代次数(比如100代)
    • 连续N代没有改进
    • 达到目标适应度

(实测发现!)对于我们的x²问题,以下参数组合效果最佳:

  • 种群大小:20
  • 交叉概率:0.8
  • 变异概率:0.05
  • 迭代次数:50

四、你可能遇到的三大坑(附解决方案)

1. 早熟收敛(整个种群过早趋同)

  • 对策:增加变异概率,使用精英保留策略

2. 收敛速度慢

  • 对策:采用自适应交叉/变异概率

3. 陷入局部最优

# 解决方法:引入移民策略
def immigration(population, rate=0.1):
    new_blood = [random.randint(0,31) for _ in range(int(len(population)*rate))]
    return population[:-len(new_blood)] + new_blood

五、完整代码大公开

def genetic_algorithm():
    population = create_population(20)
    for _ in range(50):
        # 选择
        selected = selection(population)
        # 交叉
        new_pop = []
        for i in range(0, len(selected), 2):
            p1, p2 = selected[i], selected[i+1]
            c1, c2 = crossover(p1, p2)
            new_pop.extend([mutation(c1), mutation(c2)])
        # 移民
        population = immigration(new_pop)
        # 记录最佳
        best = max(population, key=lambda x: x**2)
    return best

print(f"找到的最大值是:{genetic_algorithm()}")  # 应该输出31!

六、升级你的算法装备

想要更上一层楼?试试这些进阶技巧:

  1. 实数编码:适合连续函数优化
  2. NSGA-II:多目标优化神器
  3. 并行计算:用多核加速进化过程

(个人经验分享)在实际项目中,建议先用简单参数快速测试,找到大致方向后再精细调参。记得保存每代的进化数据,这对分析算法行为超有帮助!

七、总结

通过这个案例,我们发现:

  • 遗传算法特别适合复杂、多峰的函数优化
  • 参数设置需要平衡探索与开发的矛盾
  • 生物进化思想在计算机领域的完美应用

下次遇到棘手的优化问题,不妨试试这个"仿生算法"。说不定它会给你带来意想不到的惊喜!(就像我当年第一次用它优化神经网络参数时的震撼😉)

最后留个思考题:如果把x的范围扩展到[0,1023],需要多少位二进制编码?欢迎在评论区讨论!

人工智能之遗传算法 针对第一个函数,Rastrigin 函数,我们将解空间设定在 $[-5.12, 5.12]$ 之间,使用遗传算法迭代 100 代,种群大小为 50,交叉率为 0.8,变异率为 0.03,最终得到了精度为 15 位小数的最小值解。本次实验展示了遗传算法在解决优化问题中的有效性。通过对算法参数的调节和迭代次数的控制,我们可以获得符合要求的最优解,但是在实际应用中,对算法的参数和迭代次数的设定需要根据具体问题的性质和求解要求进行合理的调整。首先,我们介绍了遗传算法的基本原理和流程,并对相关参数进行了设定。 阅读详情

相关推荐

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

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

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

记录我的学习历程 1万+

【遗传算法GA】--计算函数最值(Python)

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

taoxing 1万+

人工智能应用-实验1-遗传算法求函数最大值实验

人工智能遗传算法求解最值问题

半岛铁盒里 1万+

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

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

includei的博客 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—标准遗传算法求函数最大值代码实现

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

weixin_43210097的博客 6655

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

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

遗传算法实战:5分钟教你找到函数最大值!(附Python代码保姆级教程)

遗传算法最大的魅力就是——你永远不知道下一代会进化出什么神仙解!(就像生命本身的奇迹)赶紧动手试试,说不定能找到意想不到的最优解哦!遇到问题欢迎评论区交流,看到必回~

kernelcraft的博客 612

遗传算法求解函数最大值(matlab).pdf

。。。

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

Python遗传算法求一元函数最大值前言代码后记参考文献 前言 最近接触遗传算法,参考了众多例子,有些又不尽然对,所以自己边理解边修改,然后写出了下面这堆传说中的屎山。。。 PS1:遗传算法原理啥的太多了,就不赘述了,优快云里面很多帖子都讲得很透彻了; PS2:要看简洁的,直接油管搜遗传算法,看莫烦的视频。 代码 不废话了,赶紧上车,啊不,上代码。 import math import numpy as np import matplotlib.pyplot as plt import random class GA(object): # 目标求解2*sin(x)+cos(x)最大值

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

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

学习笔记 2万+

告别手动下载!用Python脚本5分钟搞定NREL风速数据(附完整API调用代码)

本文详细介绍了如何使用Python脚本自动化获取NREL风速数据,从API密钥申请到数据保存的全流程。通过完整的API调用代码和实战技巧,帮助研究人员和开发者高效下载全球高精度风速数据,告别繁琐的手动操作,提升工作效率。

weixin_33724059的博客 297

遗传算法求取函数最值问题

因为产生的二进制序列一般来说不是一个,这样是为了下面更好的交叉操作。并且,多个二进制序列也有利于找到最优的解。

Henry的博客 7186

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储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万+

薄膜电容寿命预测全解析:从理论到实践,5步搞定可靠性评估

本文全面解析薄膜电容寿命预测的理论与实践,提供五步可靠性评估流程,涵盖温度应力、电压应力等关键因素分析,并分享提升寿命的实用技巧。特别适用于新能源、电动汽车等领域的设计工程师,帮助准确预测薄膜电容在实际工况下的使用寿命。

weixin_33712987的博客 432

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

硬件原理图分析

文章目录1 硬件原理图分析1.1 MCU部分1.2 NB部分1.3 电源部分 1 硬件原理图分析 1.1 MCU部分 MCU接口部分没啥需要注意,都是常规操作。 1.2 NB部分 U4是用来防静电的。 由于NB的以上几个引脚只支持1.8V,所以这里需要3.3V转1.8V的电路。只要把握住谁改变电平就好分析是怎么实现电平转换的了。 1.3 电源部分 图中的MOS是用来实现USB和电池同时插入时只能USB供电功能的。 ...

木子皿--啥都不会的菜鸟 8169

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

运行代码后你会看到,算法在约30代时就找到了接近100的最大值(实际理论最大值是10²=100)。如果把目标函数改成其他复杂函数(比如sin(x)+cos(2x)),只需要修改target_function即可!想象一群数字生物在解空间里游荡,强的活下来繁衍后代,弱的被淘汰,经过N代进化后,最终找到最优解!下次遇到复杂优化问题,别急着求导,试试让计算机帮你"进化"出一个最优解吧!举个🌰:假设初始解是3(0011)和5(0101),交叉后可能变成0011和0101,变异可能变成0010。

echoarts的博客 1476

processing与arduino互动编程

Arduino开发板对AVR单片机二次编译封装,无需考虑单片机编程寄存器、地址指针等复杂细节processing借助arduino读取各种传感器的数值,控制各种机电装置。

weixin_45679408的博客 824

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 270

遗传算法求解函数最大值

用现代化的算法解决问题

Monstor_987的博客 4944

金融领域必备:Python爬虫+AI量化分析,爬取股票数据并实现智能交易策略

本文通过Python爬虫+AI量化分析的组合,实现了从股票数据爬取到智能交易策略的全流程。免费获取全维度金融数据(行情、财务、舆情),替代付费终端;用LSTM模型捕捉股价的时间序列规律,提升预测精度;基于Backtrader实现策略回测与优化,保证策略的有效性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1371

用标准遗传算法求函数最大值

题:用标准遗传算法求函数f(x)=x+10sin(5x)+7cos(4x)的最大值,其中x的取值范围为[0,10].只是一个有多个局部极值的函数 仿真过程: (1)初始化种群数目NP=50,染色体二进制编码长度L=20,最大进化代数G=100,交叉概率Pc=0.8,变异概率Pm=0.1 (2)产生初始种群,将二进制编码转化成十进制,计算个体适应度值,并进行归一化:采用基于【轮盘赌】的选择操作、基于概率的交叉和变异操作,产生新的种群,并把历代的最优个体保留在新的种群中,进行下一步遗传操作。 (3)判断

weixin_45890771的博客 8997

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2294

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: MySQL彻底卸载指南:让旧版本干干净净不留痕(手把手教学)
下一篇: 用Flask打造超酷疫情数据可视化大屏(手把手保姆级教程)
普通网友
博客等级 码龄2年 89粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值