遗传算法 差分进化算法 粒子群优化算法区别

2023-05-16

一 遗传算法

 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精确性. 遗传算法采用选择,交叉,变异操作,在问题空间搜索最优解.经典遗传算法首先对参数进行编码,生成一定数目的个体,形成初始种群其中每个个体可以是一维或多维矢量,以二进制数串表示,称为染色体.染色体的每一位二进制数称为基因.根据自然界生物优胜劣汰的选择思想,算法中设计适应度函数作为评判每个个体性能优劣的标准,性能好的个体以一定概率被选择出来作为父代个体参加以后的遗传操作以生成新一代种群.算法中基本的遗传算子为染色体选择,染色体上基因杂交和基因变异.生成新一代种群后算法循环进行适应度评价、遗传操作等步骤,逐代优化,直至满足结束条件.

标准遗传算法的流程如下:

Stepl:初始化群体.

Step2:计算群体上每个个体的适应度值.

Step3:按由个体适应度值所决定的某个规则选择将进入下一代的个体.

Step4:按概率cp 进行杂交操作.

Step5:按概率mp 进行变异操作.

Step6:若满足某种停止条件,则执行 Step7,否则执行 Step2.

Step7:输出种群中适应度值最优的染色体作为问题的满意解.

一般情况下,算法的终止条件包括:1、完成了预先给定的进化代数;2、种群中的最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进;3、所求问题最优值小于给定的阈值.

粒子群(PSO)算法是近几年来最为流行的进化算法,最早是由Kenned和Eberhart于1995年提出.PSO 算法和其他进化算法类似,也采用“群体”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间中最优解的搜索.PSO 先生成初始种群,即在可行解空间中随机初始化一群粒子,每个粒子都为优化问题的一个可行解,并由目标函数为之确定一个适应值(fitness value).PSO 不像其他进化算法那样对于个体使用进化算子,而是将每个个体看作是在n 维搜索空间中的一个没有体积和重量的粒子,每个粒子将在解空间中运动,并由一个速度决定其方向和距离.通常粒子将追随当前的最优粒子而运动,并经逐代搜索最后得到最优解.在每一代中,粒子将跟踪两个极值,一为粒子本身迄今找到的最优解 pbest ,另一为全种群迄今找到的最优解 gbest.由于认识到 PSO 在函数优化等领域所蕴含的广阔的应用前景,在 Kenned 和 Eberhart 之后很多学者都进行了这方面的研究.目前已提出了多种 PSO改进算法,并广泛应用到许多领域.

二、差分进化算法

差分进化算法在 1997 年日本召开的第一届国际进化优化计算竞赛(ICEO)]表现突出,已成为进化算法(EA)的一个重要分支,很多学者开始研究 DE 算法,并取得了大量成果.2006年 CEC 国际会议将其作为专题讨论,由此可见 DE 算法已成为学者的研究热点,具有很大的发展空间.

DE算法的基本原理:

DE 算法主要用于求解连续变量的全局优化问题,其主要工作步骤与其他进化算法基本一致,主要包括变异(Mutation)、交叉(Crossover)、选择(Selection)三种操作。算法的基本思想是从某一随机产生的初始群体开始,利用从种群中随机选取的两个个体的差向量作为第三个个体的随机变化源,将差向量加权后按照一定的规则与第三个个体求和而产生变异个体,该操作称为变异。然后,变异个体与某个预先决定的目标个体进行参数混合,生成试验个体,这一过程称之为交叉。如果试验个体的适应度值优于目标个体的适应度值,则在下一代中试验个体取代目标个体,否则目标个体仍保存下来,该操作称为选择。在每一代的进化过程中,每一个体矢量作为目标个体一次,算法通过不断地迭代计算,保留优良个体,淘汰劣质个体,引导搜索过程向全局最优解逼近。

DE算法的求解步骤:
(1)基本参数的设置,包括NP, F, CR
(2)初始化种群
(3)计算种群适应度值
(4)终止条件不满足时,进行循环,依次执行变异、交叉、选择运算,直到终止运算。


 图2.1给出了算法的具体流程:

控制参数对一个全局优化算法的影响是很大的,DE的控制变量选择也有一些经验规则.

(1)种群数量.根据经验,种群数量 NP 的合理选择在5 D   10D之间,必须满足 NP ≥4以确保DE具有足够的不同的变异向量.

(2)变异算子.变异算子 F ∈ [0,2]是一个实常数因数,它决定偏差向量的放大比例.迄今为止的研究表明,小于0.4和大于1的 F 值仅偶尔有效, F = 0.5通常是一个较好的初始选择.若种群过早收敛,那么 F 或 NP 应该增加.

(3)交叉算子.交叉算子CR 是一个范围在[0,1]的实数,它是控制一个试验向量来自随机选择的变异向量而不是原来向量的概率的参数.CR 的一个较好的选择是0.1,但较大的CR 通常加速收敛,为了看是否可能获得一个快速解,可以首先尝试 CR = 0.9或 CR = 1.0.

(4)最大进化代数.它表示DE算法运行到指定的进化代数之后就停止运行,并将当前群体中的最佳个体作为所求问题的最优解输出.一般取值范围为100-200,当然根据问题的需要,可以增大最大进化代数以提高算法的求解精度,不过这样往往使得算法的运行时间过长.

(5)终止条件.除最大进化代数可作为DE的终止条件,还需要其它判定准则.一般当适应度值小于阀值时程序终止,阀值常选为610 .

上述参数中,F ,CR 与 NP 一样,在搜索过程中是常数,一般 F 和CR 影响搜索过程的收敛速度和鲁棒性,它们的优化值不仅依赖于目标函数的特性,还与 NP 有关.通常可通过在对不同值做一些试验之后利用试验和结果误差找到 F ,CR 和 NP 合适值。

参数设置

种群规模NP:多样性,NP大,增加搜索到最优解的概率,但是计算量加大。

缩放因子F:对基向量扰动程度,F大,扰动大,能够在更大范围寻找解。0.4~1

交叉概率CR:种群多样性,CR大,更多个体改变,利于寻找最优解。0.6~1

区别:不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产生的子代被选择的概率值,在最大化问题中适应值大的个体被选择的概率相应也会大一些。而差分进化算法变异向量是由父代差分向量生成,并与父代个体向量交叉生成新个体向量,直接与其父代个体进行选择。显然差分进化算法相对遗传算法的逼近效果更加显著。

遗传算法,粒子群算法,差分进化算法都属于进化算法的分枝,很多学者对这些算法进行了研究,通过不断的改进,提高了算法的性能,扩大了应用领域因此很有必要讨论这些算法的特点,针对不同应用领域和算法的适应能力,推荐不同的算法供使用将是十分有意义的工作.在文献中,作者针对广泛使用的 34 个基准函数分别对 DE,EA,PSO 进行了系列实验分析,对各种算法求解最优解问题进行了讨论.通过实验分析,DE 算法获得了最优性能,而且算法比较稳定,反复运算都能收敛到同一个解;PSO 算法收敛速度次之,但是算法不稳定,最终收敛结果容易受参数大小和初始种群的影响;EA 算法收敛速度相对比较慢,但在处理噪声问题方面,EA 能够很好的解决而 DE 算法很难处理这种噪声问题.

通过实验和文献分析,我们对遗传算法、粒子群算法、差分进化算法的一些指标分别进行分析现归纳如下:

(1)编码标准     GA 采用二进制编码,PSO、DE 都采用浮点实数编码,近年来许多学者通过整数编码将GA 算法、PSO 算法应用与求解离散型问题,特别是 0-1 非线性优化为题,整数规划问题、混合整数规划问题,而离散的 DE 算法则研究的比较少,而采用混合编码技术的 DE 算法则研究更少.

(2)参数设置问题    DE 算法主要有三个参数(种群大小NP、缩放因子F、交叉概率CR)要调整,而且参数设置对结果影响不太明显,因此更容易使用.相对于 GA 和 PSO 算法的参数过多,不同的参数设置对最终结果影响也比较大,因此在实际使用中,要不断调整,加大了算法的使用难度.高维问题在实际问题中,由于转化为个体的向量维数非常高,因此算法对高维问题的处理,将是很重要的.只有很好的处理高维问题,算法才能很好的应用于实际问题.

(3)高维问题     GA 对高维问题收敛速度很慢甚至很难收敛,但是 PSO 和 DE 则能很好解决.尤其是DE 算法,收敛速度很快而且结果很精确.

(4)收敛性能      对于优化问题,相对 GA,DE 和 PSO 算法收敛速度比较快,但是 PSO 容易陷入局部最优解,而且算法不稳定.

(5)应用广泛性       由于 GA 算法发明比较早,因此应用领域比较广泛,PSO 算法自从发明以来,已成为研究热点问题,这方面应用也比较多,而 DE 算法近几年才引起人们的关注而且算法性能好,因此应用领域将会增多.

DE缺点

1、搜索停滞:种群个体较少,且生成新一代个体的适应值比原种群个体适应值差,导致个体难以更新,没有收敛到极值点。

2、早熟收敛:参数设置不当,收敛过快,局部最优问题。

原文网址 点击打开链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

遗传算法 差分进化算法 粒子群优化算法区别 的相关文章

随机推荐

  • 位置环与速度环的串级PID

    WHEELTEC的串级pid参考代码 span class token keyword float span Position KP span class token operator 61 span span class token nu
  • 智能车摄像头算法——圆环元素

    入环 1 入环的函数 xff08 1 xff09 搜上下边线 xff08 2 xff09 找凸起的弧 xff08 3 xff09 两点之间补线 xff08 4 xff09 判断上线是否单调 2 找圆环3 补线入环出环 1 入环的函数 xff
  • ROS的代价地图与AMCL定位原理

    地图服务与AMCL定位 costmap xff08 代价地图 xff09 AMCL定位 xff08 自适应蒙特卡罗定位 xff09 costmap xff08 代价地图 xff09 1 地图文件格式 xff1a 除了pgm xff08 便携
  • ROS路径规划算法

    ROS路径规划算法 全局路径规划Dijkstra算法A 算法 局部路径规划DWA算法TEB算法 全局路径规划 提供Dijkstra和A算法 xff0c 默认使用Dijkstra Dijkstra是把从出发点到终点的整个栅格地图上的所有的点
  • STM32常用功能配置

    STM32基本代码 设置外部中断定时器中断定时器产生pwmAD多通道转换DMA 43 AD扫描多通道转换iic协议读取数据SPI协议读取数据 设置外部中断 中断优先级分组 外部中断 AFIO作用 注意 xff1a 1 相同的Pin不能同时触
  • Ogre-渐变背景色(gradient background)的实现

    转载自 xff1a http blog csdn net hefee article details 6287341 背景色在ogre里面是通过ViewPort类中的setBackgroundColour xff08 xff09 这个成员函
  • Qt::WindowFlags

    查了些资料 xff0c 整理了一下 xff0c 以备查询 枚举类型 Qt WindowFlags低位的一个字节用于定义窗口部件的窗口类型 Qt WindowFlags的高位字节定义了窗口提示 xff0c 窗口提示能够进行位或操作 xff0c
  • java学习记录8

    什么是File 文件夹和文件 xff1a 文件夹是用来组织和管理磁盘文件的一种数据结构 文件是在电脑中 xff0c 以实现某种功能或某个软件的部分功能为目的定义的一个单位 xff0c 文件是由文件名和图标组成 xff0c 一种类型的文件具有
  • 保护模式编程之(一)——分段机制与GDT/LDT

    概述 xff1a 若想理解操作系统程序中的启动相关的部分 xff0c 必须要理解保护模式下的编程 xff0c 而分段机制是保护模式编程下的基础 另外 xff0c 由于实模式与保护模式的不同 xff0c 对保护模式下的分段机制更需要注意 同时
  • C++ 网络编程

    socket通信 xff1a socket 创建TCP套接字 bind 将套接字绑定到本地地址端口上 listen 监听端口 connect accept 接受用户请求 xff0c 返回对应此连接的新套接字 read write close
  • ROS学习(2)——rviz与gazebo问题记录

    ROS学习 xff08 2 xff09 rviz与gazebo问题记录 继续按照教程学习 xff0c 踩了很多坑 1 工作环境配置问题 实践6 2 4在rviz中显示模型时 xff0c 运行launch文件出现如下报错 原因 xff1a 出
  • VINS-Mono 代码详细解读——基础储备:在线Cam到IMU的外参标定 InitialEXRotation类

    本讲还是为了estimator类中最主要的函数processImage xff08 xff09 做知识储备 前面两讲知识储备主要讲了IMU预积分相关的integrationBase类以及图像特征点管理器feature manager cpp
  • VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化

    本文主要介绍VINS的闭环检测重定位与位姿图优化部分 xff0c 作为系列文章的最后一节 回环检测的关键就是如何有效检测出相机曾经经过同一个地方 xff0c 这样可以避免较大的累积误差 xff0c 使得当前帧和之前的某一帧迅速建立约束 xf
  • VS Code创建、调试ROS项目

    前言 xff1a 在vs code下配置ROS项目开发的环境 包括catkin创建编译工作空间 xff0c 创建ROS项目 xff0c 调试ROS节点 一 创建工作空间 首先创建一个cMake工作空间 xff0c 用到了catkin mak
  • 《wiki官网教程》2 编写简单的服务器service和客户端 client(C++)

    服务 xff08 services xff09 是节点之间通讯的另一种方式 服务允许节点发送请求 xff08 request xff09 并获得一个响应 xff08 response xff09 之前讲的是两个节点如果要通信需要经过话题to
  • 进程和线程主要区别与定义

    抽象理解 直接上图 xff0c CPU是工厂 电力资源是cpu 时间片 进程是车间 线程是车间工人 操作系统的资源分配与调度逻辑 以多进程形式 xff0c 允许多个任务同时运行 xff1b 以多线程形式 xff0c 允许单个任务分成不同的部
  • Ogre场景中管道透明之后为黑色的问题

    depth write 设置此渲染通路的深度缓冲写入的状态是打开状态还是关闭状态 格式 depth write lt on off gt 如果深度缓冲写入处于打开状态 xff0c 无论何时一个像素想要写入画面缓冲 xff0c 深度缓冲都会更
  • 移动机器人定位方法概述

    引言 自主移动机器人导航过程需要回答三个问题 xff1a 我在哪里 xff1f 我要去哪儿 xff1f 和 我怎样到达那里 xff1f 定位就是要回答第一个问题 xff0c 确切的 xff0c 移动机器人定位就是确定机器人在其运动环境中的世
  • 运动图像目标检测与跟踪简述

    运动图像跟踪问题分为目标检测与目标跟踪两部分 一 目标检测 目标检测即为从序列图像中将变化区域从背景图像中提取出来 xff0c 依照目标与相机之间的关系可以分为静态背景下运动检测与动态背景下运动检测 1 静态背景 指的是相机在监视过程中不发
  • 遗传算法 差分进化算法 粒子群优化算法区别

    一 遗传算法 遗传算法 GA 作为一种经典的进化算法 xff0c 自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域 人们对 GA 进行了大量的研究 xff0c 提出了各种改进算法用于提高算法的收敛速度和精确性 遗传算法采用