差分进化算法_三分钟了解智能算法

2024-03-13 10:10

本文主要是介绍差分进化算法_三分钟了解智能算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dc449821d4f23b93cf470e57d832a165.png

根据百科百科的解释,智能算法是指在工程实践领域中新颖的算法或理论,这样的解释并没有详细说明到底什么是智能算法。但是根据大家约定俗成,智能算法一般指处理最优化问题的元启发算法

这一节,将根据文献及笔者知识来进行逐步介绍智能算法相关概念。

简单直观来说,最优化问题就是在一个给定环境内找到最优解的方法。例如下图,有无数局部最优点(蓝色点),如何找到最优解(红色点)就是一个最优问题。

80b237512f91a0a0dd219774d9eaa0c0.png
最优化问题

好了首先,我们先认真了解一下什么叫最优化问题,最优化是指在一定限制条件下用一定策略使目标达到最优的方法。工程与学术界大量存在着NP-hard问题(可以简单理解为多项式时间内没有确定的解),因此需要用用一些方法来求出最优解或者近似最优解。通常包括以下几个大类的算法处理最优化问题。

  • 梯度下降法:目前大量用于神经网络之中,其思想为:利用当前位置的负梯度方向搜索,该方向为最快下降位置。该方法不能保证最优解,亦不能保证速度最快。
  • 牛顿法: 利用泰勒级数来寻找的解,速度最快。
  • 拟牛顿法:改善牛顿法,利用正定矩阵来近似Hessian矩阵逆。
  • 启发式算法:在可接受时间空间内提供近似最优解或者最优解的策略总称,一般依赖特点问题环境,在对问题环境缺乏认知情况下有较优结果。
  • 元启发式算法:不针对特定环境或问题,通用式的寻优策略,基本上也就是常规理解的智能算法

这里顺便简单谈论下为什么当下流行的神经网络不使用元启发算法作为optimizer(优化器)的原因。

  1. 元启发算法需要额外大量计算时间寻优,无法满足神经网络速度需求。因为在元启发算法中寻优过程是通过不断迭代构成的,每次迭代每个individual/population(个体)通过一定规则或者概率分布迫近(移动)至最优解或者近似最优解周末。经过一定数量的迭代移动后,可以达到最优或者近似最优解周末。整个过程需要多次迭代,如果神经网络使用,会大大增加搜索时间,所以不适宜。然而,梯度下降方法可以通过数学计算快速更新权重偏移。
  2. 元启发算法对问题维数敏感(sensitive to dimensions),问题维数增加整体运算复杂度大幅增加,不利于神经网络复杂运算环境。反观梯度下降方法,对维度不敏感(dimension free)。

但是对比梯度下降方法,元启发也有很多优势,比如梯度下降有以下问题,

  1. 学习速率的问题,太快会较难收敛,太慢会导致寻优太慢。
  2. 同时当面对复杂的搜索地形时,会出现“来回摆动”,在马鞍面(saddle)会出现梯度为0的问题。
  3. 对初始条件敏感,如果初始条件很好快速收敛,但是初始条件不好可能会不能收敛。
  4. 对比元启发算法更容易陷入局部。

尽管工业及学术界进行了大量努力,推出了动能,RMSProp,Adam等等各种方法解决问题,但是也仅仅提升部分性能,根本问题较难解决。

好了,回归正题,继续介绍智能算法,对于智能算法的分类,学术界众说纷纭,没有统一的标准,有的根据问题来分类,例如:单目标,多目标,multimodal(多模)。有的根据算法类型来分,例如:进化策略,多种群。有的根据搜寻类型,例如:local-based(局部搜索),global-based(全局搜索),hybrid(混合搜索)。本文采用Ojha’s [1]的研究来进行分类。

  • Single solution based algorithms(单解算法):此类算法仅运行一个目标解,其中Simulated annealing(SA模拟灭火)算法及Tabu算法为代表。
  • population based algorithms(多解算法):此类算法在每一此迭代都会同时运行多个解,此类算法目前为主流,大多数流行算法都属于该类。它还有两个子类分别是:
  1. 进化算法:根据进化理论而来的,包括genetic algorithm(GA遗传算法),Differential evolution algorithm(DE差分算法)等。这类算法通常通过引导解进行不断的选择,交叉,变异等变化来保留较优后代解,去除较差的后代解。
  2. 群智能算法:模仿动物种群移动捕食等行为来进行搜索。Particle swarm optimization(PSO)和Ant colony optimization(ACO)为著名算法。这个分类产生了大量算法,但是大体都是一致的。由全局搜索(global exploration)加上局部寻优(local exploitation)构成。全局寻优时,采用不同的概率分布加上已有信息产生新的局部搜索范围,在局部寻优时,强化局部搜索以达到寻找最优解的目标。
  • 其他类型:还有些算法既不属于单解也不属于单解的被划分于此类,例如harmony algorithm。

智能算法目前广泛运用于工业界问题也大量被学术界研究,著名运用包括处理0、1背包,TSP路径规划,weld beam 工程优化等。随后章节会逐步讲解。

参考:

[1] V. K. Ojha, A. Abraham, V. Snášel, Metaheuristic design of feedforward neural networks: A review of two decades of research. Engineering Applications of Artificial Intelligence (2017), 60, 97-116.

这篇关于差分进化算法_三分钟了解智能算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804512

相关文章

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1