[算法学习]模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记---附MATLAB注释代码_模拟退火算法和遗传算法区别在哪-程序员宅基地

技术标签: matlab  算法学习笔记  算法  深度学习  

参考资料:智能优化算法及其Matlab示例第2版.pdf
链接: https://pan.baidu.com/s/1CSKZWBJNs4ybAJWTfnm5lw
密码: 6jut
如果代码链接失效,评论给我,我几乎当天都能回复

1.模拟退火算法(Simulated Annealing,SA)

1.1 本质:

  • 是一种通用的随机搜索算法,是对局部搜索算法的扩展。以一定的概率选择邻域中目标值相对较小的状态,一种理论上的全局最优算法。
  • 在一定的初始温度下,通过缓慢下降温度参数,使得算法能够在多项式时间内给出一个近似最优解。

1.2 算法思想

  • 思想:在搜索区间随机游走,再利用Metropolis抽样准则,使得随机游走逐渐收敛于局部最优解。 从某个初始解出发,经过大量解的变化后,可以求得给定控制参数值时组合优化问题的相对最优解,然后减小控制参数T的值,重复执行Metropolis算法,就可以在控制参数T趋于零时,最终求得组合优化问题的整体最优解。
  • 形象比喻:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。
  • Metropolis准则
    系统从一个能量状态变化到另一个状态时,相应的能量从旧的E1变化到新的E2,如果新的能量较低,就是E1<E2,系统接受此状态;否则,以一个随机的概率接受或者丢弃此状态。如公式所示:
    在这里插入图片描述
    由于后面P的概率越来越小,接受差解的概率就越来越小,就越来越接近最优解。这样经过一定次数的迭代,系统会逐渐趋于一个稳定的分布状态。

1.3 SA流程图

在这里插入图片描述

1.4 模拟退火过程

  • 加温过程
  • 等温过程:相当于物理退火的等温过程,通过物理学的知识得知,对于周围环境交换热量而温度不变的封闭系统,系统状态的自发变化总是朝着自由能够减少的方向进行,当自由能达到最小时,系统达到平衡状态。是指在一个给定温度下,SA用特殊的抽样策略进行随机搜索,最终达到平衡状态的过程,这是SA算法的内循环过程。
  • 冷却过程:降温函数,相当于物理退火的冷却过程,用来控制温度的下降方式,这是SA的外循环过程,常用的降温函数是Tnew=Told × r,其中r是温度衰退因子,r∈(0.95,0.99)。

1.5 SA解决TSP问题

参考学习:模拟退火算法
使用模拟退火算法可以比较快的求出TSP的一条近似最优路径。模拟退火解决TSP的思路:

  1. 产生一条新的遍历路径Pi+1,计算路径Pi+1的长度L( Pi+1))
  2. 若L(Pi+1) < L(Pi),则接受Pi+1为新的路径,否则以模拟退火的那个概率接受Pi+1 ,然后降温
  3. 重复步骤1,2直到满足退出条件
    产生新的遍历路径的方法有很多,下面列举其中3种:
    • 随机选择2个节点,交换路径中的这2个节点的顺序。
    • 随机选择2个节点,将路径中这2个节点间的节点顺序逆转。
    • 随机选择3个节点m,n,k,然后将节点m与n间的节点移位到节点k后面。

代码下载链接: https://pan.baidu.com/s/1md1QInQ5dgQ4zSkrfoqEPg
密码: tfuj

1.6 SA改进方向

选择

  • 选择合适的初始状态
  • 设计合适的状态产生函数,使得根据搜索进程的需要表现出状态的全空间分散性或局部区域性
  • 设计高效的退火过程
  • 改进对温度的控制方式
  • 采用并行搜索结构
  • 设计合适的算法终止准则

增加

  • 增加记忆功能,将目前为止最好哦啊的状态存储下来
  • 增加升温或重升温过程。在算法进程的适当时机,将温度适当提高,从而可激活各状态的接受概率,以调整搜索进程中的当前状态,避免算法在局部极小解处停滞不前。
  • 对每一当前状态,采用多次搜索策略,以概率接受区域内的最优状态,而不是标准SA算法的单次比较方式。
  • 与其他搜索机制的算法相结合。

1.7 SA算法的特点

  • 使用范围广,求的全局最优解的可靠性高,算法简单,便于实现
  • 该算法的搜索策略有利于 避免搜索过程因陷入局部的缺陷
  • 优点是 局部搜索能力强,运行时间较短;
  • 缺点 是全局搜索能力差,容易受参数的影响.

1.8 模拟退火算法经典案例MATLAB源码详细解析

1.8 MATLAB经典SA算法代码下载

链接: betterbench.top/#/42/detail
请添加图片描述

2. 遗传算法(Genetic Algorithm ,GA)

遗传算法基本原理和方法
选择算子的c语言实现
遗传算法-课本

2.1 本质

  • 是适应算法,应用最多的是系统最优化的研究。
  • 用途:解决优化类问题

2.2 算法思想

  • 按照适者生存的原理,逐代演化产生越来越好的近似解。使用遗传算法三个步骤:编码与解码、计算个体适应度、遗传操作(选择、交叉、变异)借助于自然遗传学 的遗传算子进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。末代种群中的最优个体经过解码,可以作为问题近似最优解。
    在这里插入图片描述

第一步

1、随机产生初始种群,个体数目一定,个体表示为染色体的基因编码
在这里插入图片描述
2、二进制编码缺点+浮点数编码特点

  • 优点是编码简单、解码操作简单、交叉、变异等遗传操作便于实现
  • 缺点是存在连续函数离散化的映射误差、当个体编码串较短,可能达不到精度要求。当个体编码较长,虽然能够提高精度,但是会使得算法的搜索空间急剧扩大。

在这里插入图片描述

第二步

计算个体的适应度(把自变量带入适应度函数计算),判断是否符合优化准则,若符合 ,输出最优解,结束计算,否则进入第三步
1、适应度函数的尺度变换
适应度函数的选取直接影响了遗传算法的收敛速度以及能否找到最优解。因为遗传算法在进化搜索众基本不利用外部信息,仅以适应度函数为依据,利用种群每个个体的适应度来进行搜索。
1.1 几种常见的适应度函数

  • 第一种:直接以待求解的目标函数转化为适应度函数
    • 最大化问题: Fit(f(x)) = f(x)
    • 最小化问题: Fit(f(x)) = -f(x)
  • 第二种:
    在这里插入图片描述
  • 第三种:
    在这里插入图片描述

1.2 适应度函数设计原则

  • 单值、连续、非负、最大化
  • 合理、一致性
  • 计算两小
  • 通用性强

1.3 适应度函数的尺度变换

  • 线性变换
  • 线性拉伸变换
  • 动态线性变换
  • 幂函数变换
  • 指数变换

第三步

** 依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体可能被淘汰 **
在这里插入图片描述
1、选择之前进行适应度的计算:

  • 按比例的适应度(proportional fitness assignment)
  • 基于排序的适应度计算(rank-based fitness assignment)

2、按照适应度进行父代个体的选择算子

  • 轮盘赌选择(Roulette Wheel Selection):是一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。选择误差较大。
  • 排序选择(Stochastic Tournament)
    在这里插入图片描述
  • 最优保留选择:首先按轮盘赌选择方法执行遗传算法的选择操作,然后将当前群体中适应度最高的个体结构完整地复制到下一代群体中。
    在这里插入图片描述

第四步

  • 按照一定的交叉概率和交叉方法,生成新的个体
    在这里插入图片描述
    1、 二进制交叉
  • 单点交叉
  • 两点交叉与多点交叉
  • 均匀交叉
  • 算术交叉
  • 洗牌交叉
  • 缩小代理交叉

第五步

  • 按照一定的变异概率和变异方法生成新的个体。
    在这里插入图片描述
    变异的方式

  • 基本位变异

  • 均匀变异

  • 边界变异

  • 非均匀变异

  • 高斯近似变异

第六步

  • 由交叉和变异产生新一代的种群,返回第二步。

2.3 优化准则(选其一)

  • 种群中个体的最大适应度超过预订设定值
  • 种群中个体的平均适应度超过预定设定值
  • 世代数超过预定设定值

2.4 优缺点

  • **优点是 ** 能很好的处理约束,能很好的跳出局部最优,最终得到全局最优解,全局搜索能力强;
  • GA算法作为现代最优化的手段,实践证明,它应用于大规模、多峰多态函数、、含离散变量等情况下的全局优化问题是合适的,在求解速度和质量上远超过常规方法,因而是一高速近似算法。
  • 对于组合最优化问题,与常规方法比较,可以认为遗传算法处于随机方法与启发式方法之间,它在引入随机搜索的同时,在解的构成法和演算过程中考虑了问题的原有构造。
  • 缺点是 收敛较慢,局部搜索能力较弱,运行时间长,且容易受参数的影响.

2.5 处理遗传算法的约束问题:

  • 显性约束
    一是把带约束的变成自由的:当约束是等式时,利用代换;约束是不等式,利用三角、指数函数化作等式;二是遗传出子代时,利用约束条件进行先天淘汰。第一个方法把运算量放在子代产生之前,第二个方法把运算量放在产生子代后。
  • 隐形约束
    选择符合条件的染色体进行交叉;淘汰不符合条件的变异子代;

2.6 约束条件处理

  • 搜索空间限定法:对遗传算法的搜索空间的大小加以限制,使得搜索空间中表示一个个体的点与解空间中的表示一个可行解的点有一一对应关系。
  • 可行解变换法:在由个体基因型向个体表现型的变换中,增加使其满足约束条件的处理过程,即寻找个体基因型与个体表现型的多对一变换关系,扩大了搜索空间,使进化过程中所产生的个体总能通过这个变换而转化成杰空间中满足约束条件的一个可行解。
  • 函数法:对在解空间中无对应可行解的个体计算其适应度时,处以一个惩罚函数,从而降低该个体的适应度,使该个体被遗传到下一代群体中的概率减小

2.7 遗传算法的应用

  • 函数优化:我的另一篇博客源码讲解
  • 组合优化
    • 研究的对象可以看作是在有限集合上定义的函数在各种条件下的极值问题。
    • 根据计算复杂性的理论,一个好的算法,其计算时间作为输入数据量的函数应该有一个多项式作为上界,这样的算法被称为多项式时间算法,简称有效算法。在组合优化中,至今还没有似乎也不可能发现普遍使适用的多项式时间算法。一个多项式时间算法问题被称为多项式时间可解问题(P问题)。组合优化中多数问题属于一类不知道是否为P问题的问题,其中包括所谓的NP(Nondeterminitic Polynomial Completeness)问题。在这类问题中,只要有一个被证明是P问题,,那么它们全部是P问题。
    • 对NP问题,既然没有准确的多项式时间算法,比较现实的妥协方法是采用多项式时间近似算法。
  • 生产调度问题
  • 自动控制
  • 机器人智能控制
  • 图像处理和模式识别
  • 人工生命
  • 遗传程序设计
  • 机器学习

2.7 遗传算法应用于机器学习

与最优化问题的应用不同,最优化问题强调搜索收敛到一个近似最优解,而GBML(Genetic-based machine learning)不仅要获得一条规则的好的个体,而且更加强调最佳协调的规则组合。一般而言,GBML应具备以下机能

  • 新规则生成,遵循优胜劣汰的规则
  • 学习过程中不破坏已获得的优良规则
  • 规则数目不预先给定
  • 相似的或者相互包含的规则,进行适当的取舍,规则集合不过分冗余

2.8 matlab中GA工具箱的使用

matlab中GA工具箱的配置方法

2.9遗传算法的改进

2.9.1 算法改进的途径

  • 改变遗传算法的组成成分和使用技术,如选用优化控制参数、适合问题特性的编码技术
  • 采用混合遗传算法
  • 采用动态自适应技术,在进化过程中调整算法控制参数和编码粒度
  • 采用非标准的遗传操作算子
  • 采用并行遗传算法
    2.9.2 改进的算法
  • 分层的遗传算法
    对于一个问题,随机生成N×n个样本,然后将它们分成N个子种群,每个子种群包含n个样本,对每个子种群独立地运行各自的遗传算法。这N个遗传算法最好在设置特性上有较大的差异,这样可以为将来的高层遗传算法产生更多种类的优良模式。
    在这里插入图片描述
  • 与梯度法结合的混合遗传算法
    梯度下降算子主要进行的是传统最速下降法中的线性搜索运算。
    混合算法众的遗传算子包括交叉算子、变异算子和选择算子的作用是宏观搜索,处理的是大范围的搜索问题,而最速下降算子的线性搜索过程的作用是极值局部搜索,微观搜索,处理的是小范围搜索和搜索加速问题。
    在这里插入图片描述

2.10 遗传算法资料

  • 遗传算法-函数优化案例完整代码(Matlab):
    链接: betterbench.top/#/43/detail请添加图片描述

3.布谷鸟算法(Cuck Search,CS)

3.1 概念和本质

本质

  • 寻找最小值的算法

概念

  • 概念:布谷鸟以寄生的方式养育幼鸟,不筑巢,而是将自己的蛋产在其他鸟巢中代为孵化,然而这些外来鸟蛋被宿主发现,宿主便会抛弃这些鸟蛋.

3.2算法思想

  1. 布谷鸟一次只产一个蛋,,并随机选择鸟窝来孵化它

  2. 在随机选择的一组鸟窝中,最好的鸟窝将会保留到下一代。

  3. 可选择的寄生巢的数量是固定的,寄生巢发现外来鸟蛋的概率为pa,其中0<=pa<=1。接下来采用Levy飞行进行鸟巢位置X的更新:

    X=X+ α \alpha α *Levy( λ \lambda λ

    对下一代鸟巢位置进行更新,计算目标函数的适应度值,如果该值优于上一代的目标函数值,则更新鸟巢位置,否则保持原来位置不变。通过位置更新后,用随机产生的服从0-1均匀分布的数值R与鸟巢主人发现概率pa相比较,若R>pa,则对X位置进行随机改变,反之不变,最后保留测试值较好的一组鸟窝位置Xnew

  4. 判断算法是否满足设置的最大迭代次数,若满足,结束迭代寻优,输出Fmin,否则继续迭代。
    在这里插入图片描述

3.3算法流程图

在这里插入图片描述

3.4 算法优缺点

  • 优点是 全局寻优能力强,参数少且易于实现,易与其他算法相结合等综合优势,
  • 缺点是 存在收敛速度慢、进化后期种群多样性差等不足。CS算法收敛速度偏慢、求解精度较低:CS算法通过莱维飞行机制寻找鸟巢,莱维飞行是一种由小步长的短距离飞行和偶尔大步长的长距离飞行组成的随机游走过程,因此布谷鸟的寻窝路径容易在不同的搜索区域间跳跃,导致布谷鸟算法的局部精细搜索能力较差,在算法迭代后期容易在全局最优解附近的区域出现震荡现象,造成算法效率偏低群多样性差等不足
  • 参考-CS算法介绍

3.5CS算法经典应用MATLAB源码讲解

布谷鸟算法(Cuckoo Search,CS)MATLAB案例详细解析

4.人工蜂群算法(Artificial Bee Colony, ABC)

4.1 本质和基本思想

  • 本质是模拟蜂群通过个体分工和信息交流,相互协作完成采蜜任务。
  • 仅应用在组合优化问题

4.2 三种蜜蜂的分工

  • 雇佣蜂(Employed Bees):利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息
  • 观察蜂(Onlooker Bees):在蜂房中等待并依据雇佣蜂分享的信息寻找新的蜜源
  • 侦查蜂(Scout Bees):寻找一个新的有价值的蜜源,它们在蜂房附近随机的寻找蜜源

4.3 搜索蜜源步骤

  • 引领蜂发现蜜源并通过8字舞的方式共享蜜源信息
  • 跟随蜂根据引领蜂所提供的信息,进行采蜜
  • 引领蜂多次搜索找到的蜜源质量未有改善时,放弃现有的蜜源,转变成侦查蜂在蜂巢附近继续寻找新的蜜源。当搜索到高质量的蜜源时,其角色又将转变为引领蜂。
  • 通过三种蜂类的转换寻找高质量的蜜源。引领蜂用于维持优良解;跟随蜂用于提高收敛速度;侦查蜂用于增强摆脱局部最优的能力。

4.3 算法步骤

  • 1.雇佣蜂根据公式更新蜜源信息
    X i d = x i d + φ ( x i d − x j d ) φ ∈ ( − 1 , 1 ) X_{id} = x_{id} + \varphi (x_{id}-x_{jd}) \varphi \in(-1,1) Xid=xid+φ(xidxjd)φ(1,1)

  • 2.观察蜂根据雇佣蜂提供的信息,采取一定的适应度函数,计算每个蜜源的选择概率
    p i = f i t i / ∑ i = 1 N f i t i p_i = fit_i/\sum_{i=1}^N fit_i pi=fiti/i=1Nfiti
    (N表示雇佣蜂的数量),然后采用轮盘赌选择一个蜜源。
    根据公式 X i d = x i d + φ ( x i d − x j d ) φ ∈ ( − 1 , 1 ) X_{id} = x_{id} + \varphi(x_{id}-x_{jd}) \varphi \in(-1,1) Xid=xid+φ(xidxjd)φ(1,1)更新蜜源信息,同时确定蜜源量

  • 3.侦查蜂判断某一个蜜源在指定步骤内是否提高,若没有提高,则丢弃该蜜源,重新初始化一个蜜源再搜索

4.4 ABC算法经典应用MATLAB源码讲解

人工蜂群算法(Artificial Bee Colony, ABC)MATALAB代码详细解析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43935696/article/details/107045716

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签