Python 进化算法的简单介绍和实现

进化算法EA——多对象优化遗传(MOO),差分进化法(DE),遗传编程(GP) 单对象优化(SOO)vs多对象优化(MOO) 单对象优化是针对一个目标函数(objectivefunction)的解决办法。例如:生产饼干的质量最大化、寻求最短路径(TSP)。 多对象优化是针对多个起冲突的目标函数寻求最佳解的方法。想要寻求的最佳解视具体情况而定。例如:小偷旅行的问题(travelling thief problem),它是背包旅行问题(Knapsack problem)和旅行商问题(travelling salesman problem)的结合。具体情... 阅读详情

总起

文章中的源码可以在 GitHub - anguangzhihen/PythonTest 中的EvoGATest.py找到。

进化算法(EA)是从达尔文的自然选择理论和现代分子遗传学获得灵感而发展出来的算法。

使用进化算法的动机之一是它能提供一套具有鲁棒问题求解的算法,它已在大学课程编排、卫星天线吊杆设计、银行贷款建模、股票的交易模型取得一定的成果。

所有进化算法都基于同一基本理念:由个体组成的种群在有限资源环境中,对资源的竞争导致自然选择现象的产生。

特点:

1.基于种群运行的;

2.多数进化算法采用重组操作算子;

3.进化算法是随机的。

组成:

1.问题表示;

2.评估函数;

3.种群;

4.父代选择机制;

5.变异操作算子,包括重组和突变;

6.生存选择机制。

进化算法的主要种类:

1.遗传算法(GA),应用最为广泛,被视为一种函数优化方法,SGA是进化算法的果蝇:采用二进制进行表示、适应度比例机制的选择操作算子、较低概率的突变操作算子、强调以生物遗传机制启发机理的重组操作算子;

2.进化策略(ES),采用实数进行表示,选择压力通常会非常高,最新的CMA算法是优化复杂实值函数的主要流行算法之一;

3.进化规划(EP),无重组操作,经典的EP算法采用状态机表示个体,现在多使用实数;

4.遗传规划(GP),以树为染色体,可定位为通过自然选择进行计算机编程,低或零突变概率;

5.学习分类器系统(LCS),通过基于规则集方式对知识表征;

6.差分进化(DE),对进化算法中常见的复制操作算子进行了“扭曲”,即得到所谓的差分突变;

7.粒子群优化(PSO),使用向量加法进行定义的突变操作算子;

8.分布估计算法(EDA),通过3步过程采用“标准”变异操作替代新子代创建。

在游戏内容的生成上,这类基于搜索方法(进化算法是其中最重要的算法之一)具有广泛的适用性,缺点是速度非常慢,然后在设计具体的搜索算法、表示以及评估函数的时候,各个成功的方法需要依靠明智的设计选择。

遗传算法实现

在上一节中,我们大概介绍了一下进化算法,本节我们将实现一下进化算法中一个简单的遗传算法。

首先我们描述一下问题:有函数y = x^2,从5位二进制编码中寻找使y最大。当然我们一眼就能看出来问题的答案是 x = 0b11111,即31,通过这个简单问题,我们能大概理解进化算法的原理。

接着我们来看一下整个算法的基本循环:

# 初始化种群,从[0, MAX_X]中随机选出
pop = np.random.randint(1, size = POP_SIZE)
for i in range(N_GENERATIONS):
    # 获取适应度
    fitness = getFitness(pop)
    # 父代选择
    pop = select(pop, fitness)
    popCopy = pop.copy()
    for popIndex in range(len(pop)):
        parent = pop[popIndex]
        # 重组,使用单点交叉
        child = crossover(parent, popCopy)
        # 突变,使用位翻转
        child = mutate(child)
        # 生存选择,使用基于年龄的替代策略,但父代和子代数量相同,所以将所有子代替换成父代
        pop[popIndex] = child

 
最后实现具体的函数即可:

# 获取适应度
def getFitness(pred):
    return pred + 1e-3

# 选择父代,使用适合比例选择(FPS)机制
def select(pop, fitness):
    return np.random.choice(pop, size = POP_SIZE, replace = True, p = fitness / fitness.sum())

# 重组
def crossover(parent, pop):
    # 选择一个交叉的个体
    other = np.random.choice(pop)
    # 选择交叉点
    point = np.random.randint(1, DNA_SIZE - 1)
    cross = [fillBits(point), fillBits(point) ^ MAX_X]
    np.random.shuffle(cross)
    return (parent & cross[0]) + (other & cross[1])

# 突变(本问题中可以使用格雷码以保证连续整数在二进制变化中的汉明距离也为1)
def mutate(child):
    for i in range(DNA_SIZE):
        # 获得突变位置
        point = 1 << i
        if np.random.rand() < MUTATION_RATE:
            child = child ^ point
    return child

运行看一下效果:

虽然选到了最高的点,不过整个算法看起来像是在随机运行。

这里存在两个问题:

1.突变概率太大造成了对优良解的破坏;

2.选择父代时,使用FPS机制导致个体合适度彼此接近时几乎没有选择压力;

处理方式:

1.我们可以将突变概率设置为1%(原为10%);

2.我们在计算适应度时可以减去当前最小的适应度扩大选择压力;

最终效果:

参考

【莫烦Python】进化算法 Evolutionary Algorithms_哔哩哔哩_bilibili

《进化计算导论》

《人工智能与游戏》

进化算法(GA)Python实现--以ackley函数为例 有关进化算法的介绍可以查看进化算法框架的介绍及Matlab实现(遗传算法)里面的算法介绍,这里使用Python重新实现一次。 此内容只测试ackley函数,如果需要测试其他函数,可以在Hedar test set中的测试函数这个链接中查看函数,可以下载MATLAB的函数实现代码参考,之后也用Python重写。 1.2 ackley函数的三维图形-Python画图 记得ackley函数也要放进去,这里的内容就不重复所以没放 2. GA的主要模块 导入的模块 2.1 初始化种群 阅读详情

相关推荐

基于DEAP库的Python进化算法从入门到入土--(一)进化算法的基本操作与实现

前沿 笔者最近开始学习如何用DEAP落实进化算法,本文既是教程,也是学习笔记,希望在帮助自己记忆理解的同时对同样正在学习的同学能有所帮助。碍于笔者水平有限,又非运筹优化科班出身,错误难免,请大家多多指正。 关于DEAP (DEAP)是一个进化计算框架,能够帮助我们快速实现和测试进化算法。由于它的灵活与强大,目前在Github上已经有2848个star。 DEAP的特性: 各类遗传算法 遗传规划 进化策略 多目标优化 多种群之间的协作与竞争 并行计算 计算过程中设定检查点 设置.

北国觅梦 1202

EA进化族算法

http://www.cnblogs.com/maybe2030/p/4665837.html https://blog.youkuaiyun.com/changyuanchn/article/details/80331134

上帝是个娘们的博客 3089

融合进化算法的QLearning增强版本

1. 背景介绍 1.1 强化学习概述 强化学习(Reinforcement Learning, RL)是机器学习的一个重要分支,它关注智能体(Agent)如何通过与环境(Environment)的交互来学习并优化其行为策略,从而获得最大的累积奖励。与监督学习和无监督学习不同,强化学习没有提供明确的输入-

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1272

进化算法(EA)求解多峰值函数优化(Matlab源码)

本文提供两种进化算法(DE和GA)求解多峰值问题。 进化算法的优越性在于能实现全局搜索,并能较好的处理复杂问题(无需求解梯度),无需人为给定初值,在多峰值优化问题中占据优势!

Duckbub1的博客 3723

模拟进化算法在聚类问题中的应用

模拟进化算法在聚类问题中的应用 作者:禅与计算机程序设计艺术 1. 背景介绍 聚类是机器学习和数据挖掘中的一个重要问题,它旨在将相似的数据点归类到同一个簇中,从而发现数据集合中的内在结构和模式。传统的聚类算法,如K-Means、层次聚类等,虽然在某些场景下效果不错,但也存在一些

AI架构师小马 224

多目标进化算法:处理多目标优化问题

多目标进化算法:处理多目标优化问题 作者:禅与计算机程序设计艺术 1. 背景介绍 在许多实际应用场景中,我们面临的优化问题往往涉及多个目标函数,这些目标函数可能彼此矛盾,需要在它们之间进行权衡和平衡。这类问题被称为多目标优化问题(Multi-Objective Optimiz

AI天才研究院 1565

进化算法的CPP/Python/Matlab简单实现

本文介绍了进化算法的基本原理及其在数值优化问题中的应用。进化算法通过种群初始化、交叉、变异和选择等操作实现优化,其中编码技术将连续变量转换为二进制形式。以最小化函数y=(x-3)^2为例,文章详细展示了Python、MATLAB和C++三种语言的实现方案,采用10位二进制编码(2位整数+4位十分位+4位百分位),并引入概率性锦标赛选择和精英保留策略来提升算法性能。实验对比了不同参数组合(代数、交叉率、变异率、种群规模)对优化效果的影响,通过100次实验平均值绘制适应度曲线。结果表明该方法能有效解决数值优化问

qq_43381170的博客 1105

神经进化算法在社交网络领域的优化与创新

1.背景介绍 社交网络已经成为了现代人们生活中不可或缺的一部分,它们为我们提供了一种快捷、高效的沟通和交流方式。然而,随着社交网络的不断发展和扩张,它们也面临着各种挑战,如信息过载、网络滥用、虚假账户等。因此,在社交网络领域,优化和创新变得至关重要。 神经进化算法(NEA)是一种基于自然进化过程的优化算法,它可以用来解决复杂的优化问题。在

AI天才研究院 809

神经进化算法:未来人工智能的驱动力

1.背景介绍 人工智能(Artificial Intelligence, AI)是指人类设计的算法和系统,能够进行某些类型的智能任务,这些任务通常被人类认为需要智能才能完成。人工智能的研究和发展涉及到多个领域,包括机器学习、深度学习、自然语言处理、计算机视觉、机器人等。 在过去的几十年里,人工智能的研究和发展取得了显著的进展。特别是在过去的十年里,深度学习技术的迅猛发展为人工智能带来了新的活力...

AI天才研究院 1233

DEAP全套软件包:Python分布式进化算法实现

本文还有配套的精品资源,点击获取 简介:DEAP全套软件包提供了DEAP软件的完整版本,包括使用指南和示例数据。DEAP是一个开源框架,利用Python实现分布式进化算法,广泛用于优化问题的解决。核心设计允许构建和定制遗传算法、遗传编程等。DEAP包含了选择、交叉、变异等操作工具,以及适应度函数的计算。全套包内含压缩文件、可执行文件、官方文档和示例输出文件等,为用户提供了深...

weixin_35756892的博客 1259

进化算法:使用Python的进化算法

在这些教程中,我们将演示和可视化遗传算法,进化策略,NEAT等算法。 下文提到的所有方法都有其中文视频和文本教程。 请访问 。 捐款 如果这样做对您有帮助,请考虑捐赠以支持我以获得更好的教程! 任何贡献都将不胜感激!

knn算法python代码_50行代码用Python实现遗传进化算法

学习如何用不到50行的代码从头开始编写简单的Evolutionary Algorithm,这些代码可用于您的项目。 包含2个示例!Photo by Johannes Plenio on Unsplash进化算法是解决诸如优化问题之类的计算问题的特殊方法。 它们通常会在合理的时间内产生非常好的结果,而无需我们对特定于问题的属性进行大量思考。 通常,我们只需要调整一些参数,然后运行一个相当通用的框架并...

weixin_39751871的博客 242

用合作协同进化算法解决多元优化问题

matlab 标准合作型协同进化遗传算法(多元函数优化) %实数编码,求最小值,函数为 bound=[-2.048 2.048]; %f2(x)= ∑i1--(n-1)[100(x(i+1)-xi^2)]^2+(xi-1)^2] %使用贪心法处理合作者选择问题。

莫烦python进化算法_算法篇——进化算法(一)

题外话各位读者大家好呀!大一转眼就过去了,时间过得真的很快,还来不及细细回味过去的一年,大二已经在不远的前方挥手示意了。也曾心比天高的想要趁这个暑假学完好多东西,不过后来总是不尽人意。新一届的挑战杯已经开始,在大二这个传说中最能出成绩的时间段,我也不禁为自己捏一把冷汗,我能够做些什么?有时候不仅仅只是个人的技术能力问题,而是说这个世界需要你的地方何在?我觉得如果能够实现从事自己喜欢的工作,为这个建...

weixin_39970166的博客 834

差分进化(DE)算法的Python实现

差分进化算法 差分进化算法(Differential Evolution Algorithm,DE)是一种高效的全局优化算法。它也是基于群体的启发式搜索算法,群中的每个个体对应一个解向量。 简单来说DE算法可用于求函数的极值点,例如:函数 求得极值点在(512.95, 404.43) 作者:Light-V

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 701

PonyGE2: 使用Python实现的语法进化算法

PonyGE2: 使用Python实现的语法进化算法 PonyGE2 是一个基于 Python 语言的开源项目,主要致力于实现语法进化(Grammatical Evolution, GE)算法。该算法是一种基于种群的进化算法,利用 BNF(巴科斯-诺尔范式)风格的语法在基因型到表型的映射过程中发挥作用。 项目基础介绍 PonyGE2 项目的目的是为那些对语法进化算法感兴趣的初学者提供一个起点,同时...

gitblog_01108的博客 662

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析

本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。

gg901的博客 1026

自适应微分进化算法:原理、实现与应用

优化问题在科学与工程领域无处不在,从工程设计到机器学习,从金融建模到资源分配。传统的基于梯度的方法在处理复杂优化问题时常常面临诸多挑战,特别是当问题具有多峰性、高维性、非线性或不可微特性时。群体智能优化算法为解决这类问题提供了有效途径,其中微分进化算法(Differential Evolution, DE)因其简单性、鲁棒性和高效性而备受关注。然而,标准DE算法的一个主要瓶颈在于其对控制参数(缩放因子FFF和交叉概率CRCRCR)的敏感性。不同的参数设置可能导致算法性能的巨大差异,而手动调参既耗时又依赖于使

T20151470的博客 768

仿真学习系列(四十九):Sigrity仿真之电容库制作

在高速电路设计中,电源完整性(PI)是确保系统稳定、可靠运行的关键因素。随着电子产品对性能的要求不断提升,PDN(电源分配网络)的设计与优化变得尤为重要。为了确保电源网络在高速工作状态下不会引发电压波动和信号干扰,我们需要在设计中精确地选择电容器进行优化,而电容库的制作则是这一过程的核心。 OptimizePI作为一个强大的电源完整性优化工具,能够帮助设计师根据不同的目标,批量进行PDN仿真,以得出最佳电容选择。

案例文章,高速信号 223

智联招聘Python岗位数据采集:基于API请求的校园招聘信息爬取实战

本项目开发了一个智联招聘Python岗位校园招聘数据采集系统,采用requests库直接调用API接口获取结构化数据。系统通过分析API接口结构,配置完整的请求头、Cookie和身份验证参数,实现了10页数据的批量采集。采集内容包括工作名称、薪资范围、企业信息等10个关键字段,并存储为Excel格式。项目严格遵守网络爬虫规范,合理控制请求频率,数据仅用于技术学习和就业分析。技术实现涉及API逆向工程、JSON数据处理、防御性编程等核心技能,为学生职业规划和教育机构教学改革提供数据支持。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 626

Python遗传算法库、进化算法框架(一)Geatpy快速入门

Geatpy是一个Python遗传算法库以及开放式进化算法框架,由华南理工大学、华南农业大学、德州奥斯汀公立大学的学生组成的联合团队开发。 (转载自https://blog.youkuaiyun.com/qq_33353186/article/details/82014986) Website (including documentation):https:/...

weixin_34148508的博客 2304

英飞凌 AURIX TC3XX 系列单片机的链接文件

这篇介绍英飞凌 AURIX TC3XX 系列单片机的链接文件,主要是针对使用 SOTA 功能如何修改链接文件,完整地实现 SOTA 功能

大橙子的博客 4385
上一篇: Python A*算法的简单实现
下一篇: 读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法
暗光之痕
博客等级 码龄13年 404粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值