[算法学习]模拟退火算法(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

智能推荐

AVFrame&AVPacket_天天av-程序员宅基地

文章浏览阅读1.5w次。AVFrame:( This structure describes decoded (raw) audio or video data. AVFrame must be allocated using av_frame_alloc(). Note that this only allocates the AVFrame itself, the buffers for the data mus_天天av

Java经典例题07:用100元人民币兑换10元、5元、1元的纸币_编程把100元换成1元5元10元-程序员宅基地

文章浏览阅读3.5k次,点赞2次,收藏12次。解题思路分析:1.100元兑换10元纸币,可以兑换10张,但每种纸币都要有,所以最多只能兑换9张,最少兑换1张。则初始值为1;循环条件小于10或者小于等于9。2.100元兑换5元纸币,可以兑换20,但每种纸币都要有,所以最多只能兑换19张,最少兑换1张。初始值为1;循环条件小于20或者小于等于19。3.100元兑换1元纸币,可以兑换100张,但每种纸币都要有,所以最多只能兑换99张,最少兑换1张。则初始值为1;循环条件小于100或者小于等于99。_编程把100元换成1元5元10元

猜三次年龄_找人猜三次年龄-程序员宅基地

文章浏览阅读450次。1、允许用户最多尝试三次2、每尝试三次后,如果还没猜对,就问用户是否继续玩,如果回答Y,y,就继续猜三次,以此往复,如果回答N,n,就直接退出times=0count=3while times<=3:age=int(input(‘请输入年龄:’))if age == 18:print(‘猜对了’)breakelif age > 18:print(‘猜大了’)else:print(‘猜小了’)times+=1if times3:choose = input(‘继续猜Y_找人猜三次年龄

SDOI2017 Round2 详细题解-程序员宅基地

文章浏览阅读152次。这套题实在是太神仙了。。做了我好久。。。好多题都是去搜题解才会的 TAT。剩的那道题先咕着,如果省选没有退役就来填吧。「SDOI2017」龙与地下城题意丢 \(Y\) 次骰子,骰子有 \(X\) 面,每一面的概率均等,取值为 \([0, X)\) ,问最后取值在 \([a, b]\) 之间的概率。一个浮点数,绝对误差不超过 \(0.013579\) 为正确。数据范围每组数据有 \...

嵌入式数据库-Sqlite3-程序员宅基地

文章浏览阅读1.1k次,点赞36次,收藏25次。阅读引言: 本文将会从环境sqlite3的安装、数据库的基础知识、sqlite3命令、以及sqlite的sql语句最后还有一个完整的代码实例, 相信仔细学习完这篇内容之后大家一定能有所收获。

C++ Builder编写WinForm从Web服务器下载文件-程序员宅基地

文章浏览阅读51次。UnicodeString templateSavePath = ChangeFileExt(ExtractFilePath(Application->ExeName),"tmp.doc");IdAntiFreeze1->OnlyWhenIdle = false;//设置使程序有反应.TMemoryStream *templateStream ;templateStre..._c++webserver下载文件

随便推点

JAVA小项目潜艇大战_java潜艇大战-程序员宅基地

文章浏览阅读8.3k次,点赞10次,收藏41次。一、第一天1、创建战舰、侦察潜艇、鱼雷潜艇、水雷潜艇、水雷、深水炸弹类完整代码:package day01;//战舰public class Battleship { int width; int height; int x; int y; int speed; int life; void move(){ System.out.println("战舰移动"); }}package day01;//侦察潜艇_java潜艇大战

02表单校验的基本步骤-程序员宅基地

文章浏览阅读940次。表单校验的基本步骤_表单校验

libOpenBlas.dll缺失依赖解决办法-程序员宅基地

文章浏览阅读4.5k次。libOpenBlas.dll缺失依赖解决办法 intellij idea 1.dll文件缺失依赖,报错:“找不到指定模块”2.下载depends查看dll缺失文件3.下载缺失依赖libopenblas.dll出错起因由于java web项目需要调用openBlas库来进行运算,就下载了预编译的libopenblas文件进行调用,首先遇到路径出错问题、之后又是dll文件缺失依赖问题,以下是解决..._libopenblas.dll

Swoole 实践篇之结合 WebSocket 实现心跳检测机制-程序员宅基地

文章浏览阅读251次,点赞3次,收藏10次。这里实现的心跳检测机制是一个基础版的,心跳包的主要作用是用于检测用户端是否存活,有助于我们及时判断用户端是否存在断线的问题。在我之前开发过的项目中,有一个基于物联网在线直播抓娃娃的项目,其中就有需要实时监控设备在线状态的需求,该需求就是使用心跳包来实现的。实际上心跳检测技术,应用更广泛的是实时通信、或设备管理的场景偏多。

Maven dependency scope_maven dependent scope-程序员宅基地

文章浏览阅读714次。Dependency scope is used to limit the transitivity of a dependency, and also to affect the classpath used for various build tasks.There are 6 scopes available:compileThis is the default scop_maven dependent scope

TCP头部结构信息_tcp头部包含哪些信息-程序员宅基地

文章浏览阅读3.6k次。TCP 头部结构信息_tcp头部包含哪些信息