昨天我们聊到了快速简单且能达到一定成效的爬山法。
但也聊到了爬山法的缺点在於如果初始位置没有座落在好的点,则无法找到全域的最佳解 (Global Maximum),那麽今天我们就先来聊聊另一个能够避开这个缺点的演算法。
模拟退火法 跟爬山法一样通常是用来寻找最佳解的演算法,其来源是模拟冶金学中退火的原理。
在冶金时,退火是将材料加热後再让它经由特定的速率使其慢慢冷却的过程,这样的机制可以帮助金属减少其中的缺陷。因此在冶金中,升温打铁并退火冷却的过程会不断重复着,直到达到满意的晶体为止。
而这种机制运用到演算法来看的话,可以想像他是一个类似爬山法的概念,如果它往好的方向移动了,那麽没话说,接受这个结果并继续前进 (打铁升温);
但如果发现结果是往比较差的方向移动 (表示目前可能已经卡在局部最佳解),这个时候模拟退火就会以一定的机率接受这个结果 (退火),具体的接受机率取决於参数的设定 (初始温度、退火速率、运行的次数等等)。
我们以昨天同一张图来做说明:
假设我们从最右方出发,目标是找到最大的解,那麽一开始没有悬念的一路往左边上方移动,当地一次来到平坦的局部最佳解时 ("flat" local maximum),如果是爬山法此时直接放弃球赛结束
然而我们从不轻言放弃的辣个男人 三井寿 模拟退火法 靠着降温退火的机制,到了这个台地时,有一定的机率去接受自己往左边的下坡处移动,而当退火退到了另一个低谷後,前方又是一片光明,又可以开心的往上爬了,反正人生嘛,有起才有落,有落才有起
就这样经过几次爬到高点 (打铁升温) 再往低处移动 (退火降温) 後,最终模拟退火法能够比爬山法有更高的机率去找到 全域最佳解。
今天要介绍的另一个演算法跟昨天的 蚂蚁演算法 一样都是模拟自然界生物习性所发展出来的演算法,而蜂群演算法模拟的是蜜蜂群 极高效率的采花蜜行为 。
大自然里蜜蜂采蜜时,首先会先由侦查蜂出去寻找,一旦找到了已经开花的蜜源,就会将花蜜吸满、带回巢穴里分给巢穴里的蜜蜂夥伴让它门熟悉花蜜的甜味与香味,同时,它会用翅膀摆动身体开始跳舞,用舞蹈来告诉同伴我找到的花蜜在哪个方向、距离多远等等...
而这时候得到讯息的其他外勤蜂就会依照得到的资讯飞往花蜜的所在区域并大量的将花蜜采回巢穴里。
那麽对应到蜂群演算法里,首先我们将蜂群分为侦查蜂、引领蜂以及跟随蜂三种,花蜜即为我们可以找到的解,每一个花蜜代表一个可能的解,而目标是找到最佳的花蜜 (最佳解, 具体如何定义依照问题而不同)。
而在中间每一次的搜寻过程中,引领蜂以及跟随蜂的作用为先後开采花蜜,也就是寻找最佳解,而侦查蜂的目标则是观察找到的解是否陷入局部最佳解 (如同前面爬山法所介绍的相对高点),若是发现到已经陷入了局部最佳解的情况,则重新随机去搜寻新的花蜜源 (其他解)。
我们把流程简化一点来看:
经过这几天的几个演算法介绍,不知道大家是否慢慢的对於一些专有名词慢慢觉得熟悉了,并且感觉好像这些演算法都会有类似的设计,例如
那麽明天我们来聊聊比较不一样的AI演算法来帮这系列的最後一篇划上句号,之後我们就开始来聊聊AI是如何应用在作曲上以及目前有哪些公司已经做出具有相当水准的应用。 或是放弃去过个开心的周末
<<: [Day9] 14 Must Know Dev Tools Tricks
Authentication 在 web 应用中经常需要验证使用者的权限,例如登入与未登入能看到的页...
花了将近一个月的时间在k8s上建置各种服务,虽然大部分都是无状态的服务可以随时重建也不影响运行,不过...
说总结前再简单复习Promise、 Async、 生成器 Promise new promise的c...
零信任 零信任是一种用於访问控制的网络安全范例,具有以数据为中心,细粒度,动态且具有可见性的特徵。 ...
前言 本文说明KDJ技术指标。 KDJ指标 KDJ指标运用一段期间内的收盘价、最高价和最低价三个元素...