当前位置:首页 » 操作系统 » 算法笔记答案

算法笔记答案

发布时间: 2023-03-19 10:29:10

❶ 优化算法笔记(八)人工蜂群算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
工蜂群算法(Artificial Bee Colony Algorithm,ABC)是一种模仿蜜蜂采蜜机理而产生的群智能优化算法。其原理相对复杂,但实现较为简单,在许多领域中都有研究和应用。
人工蜂群算法中,每一个蜜源的位置代表了待求问题的一个可行解。蜂群分为采蜜蜂、观察蜂和侦查蜂。采蜜蜂与蜜源对应,一个采蜜蜂对应一个蜜源。观察蜂则会根据采蜜蜂分享的蜜源相关信息选择跟随哪个采蜜蜂去相应的蜜源,同时该观察蜂将转变为侦查蜂。侦查蜂则自由的搜索新的蜜源。每一个蜜源都有开采的限制次数,当一个蜜源被采蜜多次而达到开采限制次数时,在宽档该蜜源采蜜的采蜜蜂将转变为侦查蜂。每个侦查蜂将随机寻找一个新蜜源进行开采,并转变成为采蜜蜂。

下面是我的实现方式(我的答案):
1. 三种蜜蜂之间可以相互转化。
采蜜蜂->观察蜂:有观察蜂在采蜜过程中发现了比当前采蜜蜂更好的蜜源,则采蜜蜂放弃当前蜜源转而变成观察蜂跟随优质蜜源,同时该观察蜂转变为采蜜蜂。
采蜜蜂->观察蜂:当该采蜜蜂所发现的蜜源被开采完后,它会转变为观察蜂去跟随其他采蜜蜂。
采蜜蜂->侦查蜂:当所有的采蜜蜂发现的蜜源都被开采完后,采蜜蜂将会变为侦查蜂,观察蜂也会变成侦查蜂,因为大家都无蜜可采。
侦查蜂->采蜜蜂、观察蜂:侦查蜂随机搜索蜜源,选择较好的数个蜜源位置的蜜蜂为采蜜蜂,其他蜜蜂为观察蜂。

2.蜜源的数量上限
蜜源的数量上限等于采蜜蜂的数量上限。初始化时所有蜜蜂都是侦查蜂,在这些侦查蜂所搜索到的蜜源中选出数个较优的蜜源,发现这些蜜源的侦查蜂变为采蜜蜂,其他蜜蜂变为观察蜂。直到所有的蜜源都被开采完之前,蜜源的数量不会增加,因为这个过程中没有产生侦查蜂缓配。所有的蜜源都被开采完后,所有的蜜蜂再次全部转化为侦查蜂,新的一轮蜜源搜索开始。也可以在一个蜜源开采完时马上产生一个新的蜜源补充,保证在整个开采过程中蜜源数量恒定不变。

蜜源的开采实际上就是观察蜂跟随采蜜蜂飞向蜜源的过程。得到的下一代的位置公式如下:

表示第i只观察蜂在第t代时随机选择第r只采蜜蜂飞行一段距离,其中R为(-1,1)的随机数。

一只观察蜂在一次迭代过程中只能选择一只采蜜蜂跟随,它需要从众多的采蜜蜂中选择一只来进行跟随。观察蜂选择的策略很简单,随机跟随一只采蜜蜂,该采蜜蜂发现的蜜源越优,则选择它的概率越大。
是不是很像轮盘赌,对,这就是轮盘赌,同时我们也可以稍作修改,比如将勤劳的小蜜蜂改为懒惰的小蜜蜂,小蜜蜂会根据蜜源的优劣和距离以及开采程度等因素综合来选择跟随哪只采蜜蜂(虽然影响不大,但聊胜于无)。
忘记了轮盘赌的小伙伴可以看一下 优化算法笔记(六)遗传算法 。
下面是我的人工蜂群算法流程图

又到了实验环节,参数实验较多,慎哪乱全部给出将会占用太多篇幅,仅将结果进行汇总展示。

实验1:参数如下

上图分别为采蜜蜂上限为10%总数和50%总数的情况,可以看出当采蜜蜂上限为10%总群数时,种群收敛的速度较快,但是到最后有一个点死活不动,这是因为该点作为一个蜜源,但由于适应度值太差,使用轮盘赌被选择到的概率太小从而没有得到更佳的蜜源位置,而因未开采完,采蜜蜂又不能放弃该蜜源。
看了看采蜜蜂上限为50%总群数时的图,发现也有几个点不动的状态,可以看出,这时不动的点的数量明显多于上限为10%总数的图,原因很简单,采蜜蜂太多,“先富”的人太多,而“后富”的人较少,没有带动“后富者”的“先富者”也得不到发展。
看看结果

嗯,感觉结果并没有什么差别,可能由于问题较简单,迭代次数较少,无法体现出采蜜蜂数对于结果的影响,也可能由于蜜源的搜索次数为60较大,总群一共只能对最多20*50/60=16个蜜源进行搜索。我们将最大迭代次数调大至200代再看看结果

当最大迭代次数为200时,人工蜂群算法的结果如上图,我们可以明显的看出,随着采蜜蜂上限的上升,算法结果的精度在不断的下降,这也印证了之前的结果,由于蜜源搜索次数较大(即搜索深度较深)采蜜蜂数量越多(搜索广度越多),结果的精度越低。不过影响也不算太大,下面我们再来看看蜜源最大开采次数对结果的影响。
实验2:参数如下

上图分别是蜜源开采限度为1,20和4000的实验。
当蜜源开采上限为1时,即一个蜜源只能被开采一次,即此时的人工蜂群算法只有侦查蜂随机搜索的过程,没有观察蜂跟随采蜜蜂的过程,可以看出图中的蜜蜂一直在不断的随机出现在新位置不会向某个点收敛。
当蜜源开采上限为20时,我们可以看到此时种群中的蜜蜂都会向一个点飞行。在一段时间内,有数个点一动不动,这些点可能就是采蜜蜂发现的位置不怎么好的蜜源,但是在几次迭代之后,它们仍会被观察蜂开采,从而更新位置,蜜源开采上限越高,它们停顿的代数也会越长。在所有蜜蜂都收敛于一个点之后,我们可以看到仍会不断的出现其他的随机点,这些点是侦查蜂进行随机搜索产生的新的蜜源位置,这些是人工蜂群算法跳出局部最优能力的体现。
当蜜源开采上限为4000时,即不会出现侦查蜂的搜索过程,观察蜂只会开采初始化时出现的蜜源而不会采蜜蜂不会有新的蜜源产生,可以看出在蜂群收敛后没有出现新的蜜源位置。

看看最终结果,我们发现,当蜜源开采上线大于1时的结果提升,但是好像开采上限为5时结果明显好于开采次数上限为其他的结果,而且随着开采次数不断上升,结果在不断的变差。为什么会出现这样的结果呢?原因可能还是因为问题较为简单,在5次开采的限度内,观察蜂已经能找到更好的蜜源进行开采,当问题较为复杂时,我们无法知晓开采发现新蜜源的难度,蜜源开采上限应该取一个相对较大的值。当蜜源开采限度为4000时,即一个蜜源不可能被开采完(开采次数为20(种群数)*200(迭代次数)),搜索的深度有了但是其结果反而不如开采限度为几次几十次来的好,而且这样不会有侦查蜂随机搜索的过程,失去了跳出局部最优的能力。
我们应该如何选择蜜源的最大开采次数限制呢?其实,没有最佳的开采次数限制,当适应度函数较为简单时,开采次数较小时能得到比较好的结果,但是适应度函数较复杂时,经过试验,得出的结果远差于开采次数较大时。当然,前面就说过,适应度函数是一个黑盒模型,我们无法判断问题的难易。那么我们应该选择一个适中的值,个人的选择是种群数的0.5倍到总群数的2倍作为蜜源的最大开采次数,这样可以保证极端情况下,1-2个迭代周期内小蜜蜂们能将一个蜜源开采完。

人工蜂群算法算是一个困扰我比较长时间的算法,几年时间里,我根据文献实现的人工蜂群算法都有数十种,只能说人工蜂群算法的描述太过模糊,或者说太过抽象,研究者怎么实现都说的通。但是通过实现多次之后发现虽然实现细节大不相同,但效果相差不多,所以我们可以认为人工蜂群算法的稳定性比较强,只要实现其主要思想即可,细节对于结果的影响不太大。
对于人工蜂群算法影响最大的因素还是蜜源的开采次数限制,开采次数限制越大,对同一蜜源的开发力度越大,但是分配给其他蜜源的搜索力度会相对减少,也会降低蜂群算法的跳出局部最优能力。可以动态修改蜜源的开采次数限制来实现对算法的改进,不过效果不显着。
其次对于人工蜂群算法影响是三类蜜蜂的搜索行为,我们可以重新设计蜂群的搜索方式来对算法进行改进,比如采蜜蜂在开采蜜源时是随机飞向其他蜜源,而观察蜂向所选的蜜源靠近。这样改进有一定效果但是在高维问题上效果仍不明显。
以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(七)差分进化算法
下一篇 优化算法笔记(九)杜鹃搜索算法

优化算法matlab实现(八)人工蜂群算法matlab实现

❷ 优化算法笔记(六)遗传算法

遗传算法(Genetic Algorithms,GA)是一种粗衡模拟自然中生物的遗传、进化以适应环境的智能算法。由于其算法流程简单,参数较少优化速度较快,效果较好,在图像处理、函数优化、信号处理、模式识别等领域有着广泛的应用。
在遗传算法(GA)中,每一个待求问题的候选解被抽象成为种群中一个个体的基因。种群中个体基因的好坏由表示个体基因的候选解在待求问题中的所的得值来评判。种群中的个体通过与其他个体交叉产生下一代,每一代中个体均只进行一次交叉。两个进行交叉的个体有一定几率交换一个或者多个对应位的基因来产生新的后代。每个后代都有一定的概率发生变异。发生变异的个体的某一位或某几位基因会变异成其他值。最终将以个体的适应度值为概率选取个体保留至下一代。

遗传算法启发于生物的繁殖与dna的重组,本次的主角选什么呢?还是根据大家熟悉的孟德尔遗传规律选豌豆吧,选动物的话又会有人疑车,还是植物比较好,本次的主角就是它了。

遗传算法包含三个操作(算子):交叉,变异和选择操作。下面我们将详细介绍这三个操作。
大多数生物的遗传信息都储存在DNA,一种双螺旋结构的复杂有机化合物。其含氮碱基为腺嘌呤、鸟嘌呤、胞嘧啶及胸腺嘧啶。

表格中表示了一个有10个基因的个体,它们每一个基因的值为0或者1。

生物的有性生殖一般伴随着基因的重组。遗传算法中父辈和母辈个体产生子代个体的过程称为交叉。

表中给出了两个豌豆的基因,它们均有10个等位基因(即编号相同的基因)。
遗传算法的交叉过程会在两个个体中随机选择1位或者n位基因进行交叉,即这两个个体交换等位基因。
如,A豌豆和B豌豆在第6位基因上进行交叉,则其结果如下

当两个个体交叉的等位基因相同时,交叉过程也有可能没有产生新慧衡的个体,如交叉A豌豆和B豌豆的第2位基因时,交叉操作并没有产生新的基因。

一般的会给群体设定一个交叉率,crossRate,表示会在群体中选取一定比例的个体进行交叉,交叉率相对较大,一般取值为0.8。

基因的变异是生物进化的一个主要因素。
遗传算法中变异操作相对简单,只需要将一个随机位基因的值修改就行了,因为其值只为0或1,那么当基因为0时,变异操作会将其值设为1,当基因值为1时,变异操作会将其值设为0。

上图表示了A豌豆第3位基因变异后的基因编码。
与交叉率相似,变异操作也有变异率,alterRate,但是变异率会远低于交叉率,否则会产生大量的随机基因。一般变异率为0.05。

选择操作是遗传算法中的一个关键操作,它的主要作用就是根据一定的策略随机选择个体保留至下一代。适应度越优的岩碧做个体被保留至下一代的概率越大。
实现上,我们经常使用“轮盘赌”来随机选择保留下哪个个体。

假设有4个豌豆A、B、C、D,它们的适应度值如下:

适应度值越大越好,则它们组成的轮盘如下图:

但由于轮盘赌选择是一个随机选择过程,A、B、C、D进行轮盘赌选择后产生的下一代也有可能出现A、A、A、A的情况,即虽然有些个体的适应度值不好,但是运气不错,也被选择留到了下一代。
遗产算法的三个主要操作介绍完了,下面我们来看看遗传算法的总体流程:

前面我们说了遗传算法的流程及各个操作,那么对于实际的问题我们应该如何将其编码为基因呢?

对于计算机来所所有的数据都使用二进制数据进行存放,如float类型和double类型的数据。
float类型的数据将保存为32位的二进制数据:1bit(符号位) 8bits(指数位) 23bits(尾数位)
如-1.234567f,表示为二进制位

Double类型的数据将保存为64位的二进制数据:1bit(符号位) 11bits(指数位) 53bits(尾数位)
如-1.234567d,表示为二进制为

可以看出同样的数值不同的精度在计算机中存储的内容也不相同。之前的适应度函数 ,由于有两个double类型的参数,故其进行遗传算法基因编码时,将有128位基因。
虽然基因数较多,但好在每个基因都是0或者1,交叉及变异操作非常简单。

相比二进制编码,十进制编码的基因长度更短,适应度函数 有两个输入参数,那么一个个体就有2个基因,但其交叉、变异操作相对复杂。
交叉操作
方案1:将一个基因作为一个整体,交换两个个体的等位基因。
交换前

交换第1位基因后

方案2:将两个个体的等位基因作为一个整体,使其和不变,但是值随机
交换前

交换第1位基因后

假设A、B豌豆的第一位基因的和为40,即 ,第一位基因的取值范围为0-30,那么A、B豌豆的第一位基因的取值范围为[10,30],即 为[0,30]的随机数, 。
变异操作,将随机的一位基因设置为该基因取值范围内的随机数即可。

这个过程说起来简单但其实现并不容易。

我们要将它们的值映射到一个轴上才能进行随机选择,毕竟我们无法去绘制一个轮盘来模拟这个过程

如图,将ABCD根据其值按顺序排列,取[0,10]内的随机数r,若r在[0,1]内则选择A,在(1,3]内则选择B,在(3,6]内则选择C,在(6,10]则选择D。
当然这仍然会有问题,即当D>>A、B、C时,假如它们的值分布如下

那么显然,选D的概率明显大于其他,根据轮盘赌的选择,下一代极有可能全是D的后代有没有办法均衡一下呢?
首先我想到了一个函数,

不要问我为什么我不知道什么是神经什么网络的,什么softmax、cnn统统没听说过。

这样一来,它们之间的差距没有之前那么大了,只要个体适应度值在均值以上那么它被保留至下一代的概率会相对较大,当然这样缩小了个体之间的差距,对真正优秀的个体来说不太公平,相对应,我们可以在每次选择过程中保留当前的最优个体到下一代,不用参与轮盘赌这个残酷的淘汰过程。

最令人高兴的环节到了,又可以愉快的凑字数了。

由于遗传算法的收敛速度实在是太慢,区区50代,几乎得不到好的结果,so我们把它的最大迭代次数放宽到200代。

使用二进制编码来进行求解
参数如下:

求解过程如上图,可以看出基因收敛的很快,在接近20代时就图中就只剩一个点了,之后的点大概是根据变异操作产生。看一下最后的结果。

可以看出最好的结果已经得到了最优解,但是10次实验的最差值和平均值都差的令人发指。为什么会这样呢?

问题出在二进制编码上,由于double类型的编码有11位指数位和52位小数位,这会导致交叉、变异操作选到指数位和小数位的概率不均衡,在小数位上的修改对结果的影响太小而对指数为的修改对结果的影响太大,
如-1.234567d,表示为二进制为

对指数为第5位进行变异操作后的结果为-2.8744502924382686E-10,而对小数位第5为进行变异操作后的结果为-1.218942。可以看出这两部分对数值结果的影响太不均衡,得出较好的结果时大概率是指数位与解非常相近,否则很难得出好的结果,就像上面的最差值和均值一样。
所以使用上面的二进制编码不是一个好的基因编码方式,因此在下面的实验中,将使用十进制来进行试验。

使用:十进制编码来进行求解
参数如下:

我们可以看到直到40代时,所有的个体才收束到一点,但随后仍不断的新的个体出现。我们发现再后面的新粒子总是在同一水平线或者竖直线上,因为交叉操作直接交换了两个个体的基因,那么他们会相互交换x坐标或者y坐标,导致新个体看起来像在一条直线上。
我们来看看这次的结果。

这次最优值没有得到最优解,但是最差值没有二进制那么差,虽然也不容乐观。使用交换基因的方式来进行交叉操作的搜索能力不足,加之轮盘赌的选择会有很大概率选择最优个体,个体总出现在矩形的边上。
下面我们先改变轮盘赌的选择策略,使用上面的sigmod函数方案,并且保留最优个体至下一代。

使用:十进制编码来进行求解
参数如下:

看图好像跟之前的没什么区别,让我们们看看最终的结果:

可以看出,最优值没有什么变化,但是最差值和平均值有了较大的提升,说明该轮盘赌方案使算法的鲁棒性有了较大的提升。在每次保留最优个体的情况下,对于其他的个体的选择概率相对平均,sigmod函数使得即使适应度函数值相差不太大的个体被选到的概率相近,增加了基因的多样性。

使用:十进制编码来进行求解,改变交叉方案,保持两个个体等位基因和不变的情况下随机赋值。
参数如下:

上图可以看出该方案与之前有明显的不同,在整个过程中,个体始终遍布整个搜索空间,虽然新产生的个体大多还是集中在一个十字架型的位置上,但其他位置的个体比之前的方案要多。
看看结果,

这次的结果明显好于之前的所有方案,但仍可以看出,十进制的遗传算法的精度不高,只能找到最优解的附近,也有可能是算法的收敛速度实在太慢,还没有收敛到最优解。

遗传算法的探究到此也告一段落,在研究遗传算法时总有一种力不从心的感觉,问题可能在于遗传算法只提出了一个大致的核心思想,其他的实现细节都需要自己去思考,而每个人的思维都不一样,一万个人能写出一万种遗传算法,其实不仅是遗传算法,后面的很多算法都是如此。
为什么没有对遗传算法的参数进行调优,因为遗传算法的参数过于简单,对结果的影响的可解释性较强,意义明显,实验的意义不大。

遗传算法由于是模仿了生物的进化过程,因此我感觉它的求解速度非常的慢,而且进化出来的结果不一定是最适应环境的,就像人的阑尾、视网膜结构等,虽然不是最佳的选择但是也被保留到了今天。生物的进化的随机性较大,要不是恐龙的灭绝,也不会有人类的统治,要不是人类有两只手,每只手有5根手指,也不会产生10进制。
以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(五)粒子群算法(3)
下一篇 优化算法笔记(七)差分进化算法

优化算法matlab实现(六)遗传算法matlab实现

❸ 算法笔记之博弈问题——猫和老鼠

博弈问题,需要注意,对于每个玩家,都会争取:

LeetCode913. 猫和老鼠

两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。

图的形式是:graph[a] 是一个列表,由满足 ab 是图中的一条边的所有节点 b 组成。

老鼠从节点 1 开始,第一个出发;猫从节点 2 开始,第二个出发。在节点 0 处有一个洞。

在每个玩家的行动中,他们 必须 沿着图中与所在当前位置连通的一条边移动。例如,如果老鼠在节点 1 ,那么它必须移动到 graph[1] 中的任一节点。

此外,猫无法移动到洞中(节点 0)。

然后,游戏在出现以下三种情形之一时结束:

如果猫和老鼠出现在同一个节点,猫获胜。
如果老鼠到达洞中,老鼠获胜。
如果某一位置重复出现(即,玩家的位置和移动顺序都与上一次行动相同),游戏平局。
给你一张图 graph ,并假设两位玩家都都以最佳状态参与游戏:

如果老鼠获胜,则返回 1;
如果猫获胜,则返回 2;
如果平局,则返回 0 。

题目描述比较长,但其实还是很好理解的。需要注意,每个玩家都会争取自己获胜。本题就是简单的深度优先搜素+记忆化问题了。

这里考虑的是怎么才能算平局,我们采取的方法是,如果有n个节点,到2n轮如果还没出结果,就认为可以平局了。

需要注意的是记忆化,memo[i][j][k] 代表猫在i,老鼠在j,在第k轮的结果。

❹ 【算法笔记】算法的平均时间复杂度A(n)的公式及示例

算法平均时间复杂度计算公式

其中:

举例:检索问题,数组 有 个元素,每个元素为从1到n的整数。若待检索元素在 中(例如1,2,3,4,5),则比较次数为其本身。若待检索元素位于 的空隙中(例如0.5,1.5,2.5),则比较次数为 ,也就是从头到尾比较一遍。若位于 和位于 的空隙的待检索元素数量各占一半,检索的平均时间复杂度是多少?

位于 的情况:假设 在 的概率为 ,则 在每个位置的概率为 ,若 的值为 ,则需要比较 次。平均时间复杂度为

位于 的空隙的情况: 不在 的概率为 ,每种情况都要比较 次,则该情况的平均时间复杂度为

综上,结合等差数列求和公式有:

当 ,

❺ 老喻人生算法笔记-05 三段-内控:跑好大脑的四人接力赛

上一讲,我们讲了二段,切换,你要在大脑的两种思维模式之间自如切换。这一讲,我们进一步加大分辨率,来拆解我们人类的认知行为。

在三段内控这个阶段,你需要知道,一次完整地认知行为,实际上是由 4 个最为关键的控制点组成的。

我先问你一个问题,超级富豪有什么区别于常人的地方?

德国作家齐特尔曼博士做了一个调查,发现了成功的公司创始人有 8 种人格特质,其中一条是“内部控制点”:人们的行为由自己控制。因为成功者坚信:“我的命运掌握在我自己的手中。”

《高效能人士的 7 个习惯》这本书在全球卖了一亿册,他的作者柯维,讲过一段话,一段让他永生难忘的话:

在外界刺激和回应之间,存在着一个空间, 我们的回应就存在于这个空间之中, 我们的成长和幸福蕴含在我们的回应中轮滑。

你可以想象一下,这就像一个夹心饼干,外部世界的刺激是上面那层饼干,你的内部感觉和回应是下面那层,中间还有空出来一块放夹心的地方。

这个地方就是柯维说的空间,是外部世界和你内心世界之间的空间。这个空间让你可以对外部世界作出反应,也能让你的内心世界成长和感受幸福。

有些人会主动把握这个中间夹层,有些人就放弃掉了。我们平时干的傻事儿, 要么是一时冲动 , 要么是条件反射式地作出回应 。这就很像上一讲里我们讲的自动驾驶系统,这其实是一种动物式的本能反应,如果你停留在这个系统里,你就放弃了夹心饼干中间那块甜美的地带。

但要想启动中间这个空间,做到主动控制并不容易,

原因有三个:

一是,我们的世界变得越来越自动化了,智能手机和网络让人们变得没那么敏锐了。

二是,人的专注力带宽是非常有限的。《决策的力量》这本书研究发现,人脑每秒钟能够接收 1000 万比特的信息量,但其中只有 50 比特是思维在有意识的状态下加以处理的。

三是,信息泛滥让人的持续专注力下降,微软有个调查,2000 年人们的持续专注力还有 12 秒,2015 年只有 8 秒。

大脑认知行为的四个内控点

那怎么才能做到主动控制呢?

最好的办法是,像飞行员,大多时候靠飞机自动驾驶,起飞和降落等关键控制点,人工介入。

其实,我们上节课说到的,巨星碧昂斯的复盘秘密是在酒店看录像,到关键地方,“啪”地按下暂停键。这个动作就是一个“内控点”,它帮助我们形成一种暂停能力,让自动模式暂停,启动主动模式。

那么,该在什么时候按下暂停键呢?

要回答这个问题,我们先引入一个概念:认知飞轮。

科学研究需要找到基本的颗粒。物理学找到了原子,生物学找到了细胞和基因,信息学找到了比特,那么

“认知”的基本颗粒呢,我就把雹悔它叫做“认知飞轮”。

[图片上传失败...(image-24860e-1566890500778)]

“认知飞轮”由感知 、认知、决策以及行动这 四个节点 构成:

 在感知环节,你像个情报员,获取外部信息,所以你需要 很敏感 ;

在认知环节,你像个分析师,你需要 特别理性 ,考虑各种变量,并且给予公平的估值;

 在决策环节,你像个指挥官,你必须根据分析师的评估计算,作出一个决定,而且这个决定必然是有取舍的,你需要十分 果断 ;

 在行动环节,你像个战士,需要 不畏艰险,勇往直前 ,执行任务。

我把这四个环节的要求总结为 16 个字:

好奇感知、灰度认知、黑白决策、疯子行动 。

难题来了,敏感、理性、决断、野蛮,看起来都是有点儿冲突的性格。一个人怎么做到呢?

其实啊,一个完整的认知飞轮,就像一场 4 乘 100 米的接力赛,是由 4 个人共同来完成的,他们分别叫感知、认知、决策和行动。

“感知”跑完了把接力棒交给“认知”,“认知”跑完了交给“决策”,最后由“行动”来跑最后一棒。

这四个人彼此交棒的那一刻,就是“内控点”要介入的时候。

我们的认知出现问题,也经常发生在这些点上。

例如,“感知”作为侦察兵获取了某个信息,结果到了内控点他不交棒,拖到认知环节。你知道一个人如果太敏感,就会有些情绪化,也很难客观地评价各种可能的情况。

又比方说“认知”这个人,更像一名军师腊肆腊,优点是特别智慧,考虑问题周到,但让他拍板,可能就会因为想法太多而优柔寡断。所以到了“决策”这个内控点,他必须把接力棒交给一名将军气质的人。

以上是用生动的人格打比喻,来描述我们在认知基本单元上的四个“内控点”,这个过程都发生在大脑当中。

提升思考率

但想做到让这四个人格,在大脑里完美交棒并不容易。

现实生活中经常会有两类人容易在这件事上犯错误:

第一类人,有点懒,他压根没有停下来,去思考。正如科学家卡拉汉的研究:人们做不出聪明行为,并不是因为他们缺乏动机或能力有限,而是他们缺乏对思考时机的敏感性。这种敏感性,其实就体现为我们在“内控点”的暂停能力。

就好像在一条路上走,明明有个岔路口,如果你停下来想一想多半都能得出正确答案,但大部分人压根没有停下来。

那怎么提升我们思考的敏感性呢?

我给你一个指标,来评判你思考的覆盖范围: 思考率 。

这是我创造的一个词。思考率,等于主动思考的次数,占你内控点的数量的比例。我有个很厉害的朋友,看起来也不那么聪明,遇到问题想得很慢,但他就是能在每个内控点停下来,慢慢想,死磕,然后再走向下一个内控点。这类人,我就称之为“思考率”很高。反过来,有的人就像一个聪明学生,最厉害的题都答出来了,简单的题却漏答了。这其实是缺乏对思考机会的敏感性。

设立大脑立项决策者

第二类人,是看起来很聪明的人,他们总是爱自圆其说。

人们不能忍受不完整和不确定性,所以总想把认知飞轮这个圆圈快点儿画完。认知神经科学之父加扎尼加博士就发现了一个秘密:大脑会编造理由。

聪明人很擅长找到一个解释,然后就觉得自己想明白了,想赶紧蒙混过关。这种人赢了就觉得是自己实力强大,输了就说是运气不好。这样其实会堵死自己成长的路途。

那怎么避免小聪明呢?

你的脑子要给自己设立一个角色,叫 “立项决策者”。

立项决策者是四人接力赛的总教练,他要指挥“感知、认知、决策、行动”这四个角色完成接棒和赛跑。

放到我们的生活语境来理解,“立项决策者”是一个挥舞小皮鞭的狠人,他催促我们完成每个角色的任务,还要在每个内控点顺利交棒。我们常说,“一个人要对自己狠一点”,说的就是你在心里住一个“立项决策者”,遇到困难不能跳过、逃避。

说完 单个认知飞轮里面的四个“内控点 ”,我们再说一下 不同的认知飞轮之间的“内控点”。

这就像羽毛球比赛打的每个球,从一个来回结束,到开始准备打下一个球,这中间也是一个重要的“内控点”。

在这个内控点,我们需要正确的 复盘 。我们要充分利用上一个认知飞轮的经历和反馈,从错误中吸取教训,从经验中提升能力。

要做到这一点,关键在于你能把下一个认知飞轮的决策过程,和上一个认知飞轮的结果分开。

为什么呢?因为好的决策未必带来好的结果。好的结果,也可能是由错误的决策撞来的。

所以,别后悔,别找借口,不要怕犯错,有时候还要主动犯错,因为随机突变可能带来意想不到的好处。

把握内控点,说起来简单,做起来不容易。最后,我送给你一个有用的操作方法,叫:巴菲特内控法。巴菲特说自己如果不在一张纸上写下自己的理由,就绝不交易。这个交易可能是错的,但自己必须有一个“交易答案”。

比方说,在纸上写:“我今天要花 500 亿美金来买苹果公司,因为……”

如果你不能回答这个问题,你就不要买。

写在纸上能有什么用呢?其实,就是建立了一个节点,人为制造了一个“内控点”,防止爱欺骗自己的大脑过于冲动。

本讲小结

总结一下,这一讲我们讲了三段:内控。

我希望你记住,不管人生多么紧迫,你都有权利按下自己的暂停键。在那些关键时刻,你只用说:慢,让我想想看!然后激活脑袋里的那位“立项决策者”,开始计算你的答案。

思考题

我们说,感知环节,你要像个情报员,敏感地获取外部信息;认知环节,你要像个分析师,理性评估;决策环节,你要像个指挥官,果断取舍;行动环节,你要像个战士,勇往直前。

但能把这四个角色都做好,其实非常难,你在哪个角色完成得比较好?又在哪个角色上是短板呢?

划重点

“认知飞轮”有四个环节:

1. 感知环节,你要像个情报员,获取外部信息,所以你需要很敏感;

2. 认知环节,你要像个分析师,考虑评估各种变量,你需要特别理性;

3. 决策环节,你要像个指挥官,作出决定和取舍,你需要十分果断;

4. 行动环节,你要像个战士,勇往直前执行任务,需要不畏艰险。

❻ 优化算法笔记(一)优化算法的介绍

(以下描述,均不是学术用语,仅供大家快乐的阅读)

        我们常见常用的算法有排序算法,字符串遍历算法,寻路算法等。这些算法都是为了解决特定的问题而被提出。

        算法本质是一种按照固定步骤执行的过程。

        优化算法也是这样一种过程,是一种根据概率按照固定步骤寻求问题的最优解的过程。与常见的排序算法、寻路算法不同的是,优化算法不具备等幂性,是一种 概率算法 。算法不断的 迭代 执行同一步骤直到结束,其流程如下图。

        等幂性即 对于同样的输入,输出是相同的 。

        比如图1,对于给定的鱼和给定的熊掌,我们在相同的条件下一定可以知道它们谁更重,当然,相同的条件是指鱼和熊掌处于相同的重力作用下,且不用考虑水分流失的影响。在这些给定的条件下,我们(无论是谁)都将得出相同的结论,鱼更重或者熊掌更重。我们可以认为,秤是一个等幂性的算法(工具)。

        现在把问题变一变,问鱼与熊掌你更爱哪个,那么现在,这个问题,每个人的答案可能不会一样,鱼与熊掌各有所爱。说明喜爱这个算法不是一个等幂性算法。当然你可能会问,哪个更重,和更喜欢哪个这两个问题一个是客观问题,一个是主观问题,主观问题没有确切的答案的。当我们处理主观问题时,也会将其转换成客观问题,比如给喜欢鱼和喜欢熊掌的程度打个分,再去寻求答案,毕竟计算机没有感情,只认0和1(量子计算机我不认识你)。

        说完了等幂性,再来说什么是概率算法。简单来说就是看脸、看人品、看运气的算法。

        有一场考试,考试的内容全部取自课本,同时老师根据自己的经验给同学们划了重点,但是因为试卷并不是该老师所出,也会有考试内容不在重点之内,老师估计试卷中至少80%内容都在重点中。学霸和学渣参加了考试,学霸为了考满分所以无视重点,学渣为了pass,因此只看了重点。这样做的结果一定是score(学霸)>=score(学渣)。

        当重点跟上图一样的时候,所有的内容都是重点的时候,学霸和学渣的学习策略变成了相同的策略,则score(学霸)=score(学渣)。但同时,学渣也要付出跟学霸相同的努力去学习这些内容,学渣心里苦啊。

        当课本如下图时

        学霸?学霸人呢,哪去了快来学习啊,不是说学习一时爽,一直学习一直爽吗,快来啊,还等什么。

        这时,如果重点内容远少于书本内容时,学渣的学习策略有了优势——花费的时间和精力较少。但是同时,学渣的分数也是一个未知数,可能得到80分也可能拿到100分,分数完全取决于重点内容与题目的契合度,契合度越高,分数越高。对学渣来说,自己具体能考多少分无法由自己决定,但是好在能够知道大概的分数范围。

        学霸的学习策略是一种遍历性算法,他会遍历、通读全部内容,以保证满分。

        学渣的学习策略则是一种概率算法,他只会遍历、学习重点内容,但至于这些重点是不是真重点他也不知道。

        与遍历算法相比,概率算法的结果具有不确定性,可能很好,也可能很差,但是会消耗更少的资源,比如时间(人生),空间(记忆)。概率算法的最大优点就是 花费较少的代价来获取最高的收益 ,在现实中体现于节省时间,使用很少的时间得到一个不与最优解相差较多的结果。

        “庄子:吾生也有涯,而知也无涯;以有涯随无涯,殆矣。”的意思是:人生是有限的,但知识是无限的(没有边界的),用有限的人生追求无限的知识,是必然失败的。

        生活中概率算法(思想)的应用其实比较广泛,只是我们很少去注意罢了。关于概率算法还衍生出了一些有趣的理论,比如墨菲定律和幸存者偏差,此处不再详述。

        上面说到,优化算法就是不停的执行同样的策略、步骤直到结束。为什么要这样呢?因为优化算法是一种概率算法,执行一次操作就得到最优结果几乎是不可能的,重复多次取得最优的概率也会增大。

        栗子又来了,要从1-10这10个数中取出一个大于9的数,只取1次,达到要求的概率为10%,取2次,达到要求的概率为19%。

        可以看出取到第10次时,达到要求的概率几乎65%,取到100次时,达到要求的概率能接近100%。优化算法就是这样简单粗暴的来求解问题的吗?非也,这并不是一个恰当的例子,因为每次取数的操作之间是相互独立的,第2次取数的结果不受第1次取数结果的影响,假设前99次都没达到要求,那么再取一次达到要求的概率跟取一次达到要求的概率相同。

        优化算法中,后一次的计算会依赖前一次的结果,以保证后一次的结果不会差于前一次的结果。这就不得不谈到马尔可夫链了。

        由铁组成的链叫做铁链,同理可得,马尔可夫链就是马尔可夫组成的链。

        言归正传, 马尔可夫链(Markov Chain, MC) ,描述的是 状态转移的过程中,当前状态转移的概率只取决于上一步的状态,与其他步的状态无关 。简单来说就是当前的结果只受上一步的结果的影响。每当我看到马尔可夫链时,我都会陷入沉思,生活中、或者历史中有太多太多与马尔可夫链相似的东西。西欧封建等级制度中“附庸的附庸不是我的附庸”与“昨天的努力决定今天的生活,今天的努力决定明天的生活”,你的下一份工作的工资大多由你当前的工资决定,这些都与马尔可夫链有异曲同工之处。

        还是从1-10这10个数中取出一个大于9的数的这个例子。基于马尔可夫链的概率算法在取数时需要使当前取的数不小于上一次取的数。比如上次取到了3,那么下次只能在3-10这几个数中取,这样一来,达到目标的概率应该会显着提升。还是用数据说话。

        取1次达到要求的概率仍然是

        取2次内达到要求的概率为

        取3次内达到要求的概率为

        取4次内……太麻烦了算了不算了

        可以看出基于马尔可夫链来取数时,3次内能达到要求的概率与不用马尔可夫链时取6次的概率相当。说明基于马尔可夫链的概率算法求解效率明显高于随机概率算法。那为什么不将所有的算法都基于马尔可夫链呢?原因一,其实现方式不是那么简单,例子中我们规定了取数的规则是复合马尔可夫链的,而在其他问题中我们需要建立适当的复合马尔科夫链的模型才能使用。原因二,并不是所有的问题都符合马尔科夫链条件,比如原子内电子出现的位置,女朋友为什么会生(lou)气,彩票号码的规律等,建立模型必须与问题有相似之处才能较好的解决问题。

        介绍完了优化算法,再来讨论讨论优化算法的使用场景。

        前面说了优化算法是一种概率算法,无法保证一定能得到最优解,故如果要求结果必须是确定、稳定的值,则无法使用优化算法求解。

        例1,求城市a与城市b间的最短路线。如果结果用来修建高速、高铁,那么其结果必定是唯一确定的值,因为修路寸土寸金,必须选取最优解使花费最少。但如果结果是用来赶路,那么即使没有选到最优的路线,我们可能也不会有太大的损失。

        例2,求城市a与城市b间的最短路线,即使有两条路径,路径1和路径2,它们从a到b的距离相同,我们也可以得出这两条路径均为满足条件的解。现在将问题改一下,求城市a到城市b耗时最少的线路。现在我们无法马上得出确切的答案,因为最短的线路可能并不是最快的路线,还需要考虑到天气,交通路况等因素,该问题的结果是一个动态的结果,不同的时间不同的天气我们很可能得出不同的结果。

        现实生产、生活中,也有不少的场景使用的优化算法。例如我们的使用的美图软件,停车场车牌识别,人脸识别等,其底层参数可能使用了优化算法来加速参数计算,其参数的细微差别对结果的影响不太大,需要较快的得出误差范围内的参数即可;电商的推荐系统等也使用了优化算法来加速参数的训练和收敛,我们会发现每次刷新时,推给我们的商品都有几个会发生变化,而且随着我们对商品的浏览,系统推给我们的商品也会发生变化,其结果是动态变化的;打车软件的订单系统,会根据司机和客人的位置,区域等来派发司机给客人,不同的区域,不同的路况,派发的司机也是动态变化的。

        综上我们可以大致总结一下推荐、不推荐使用优化算法的场景的特点。

        前面说过,优化算法处理的问题都是客观的问题,如果遇到主观的问题,比如“我孰与城北徐公美”,我们需要将这个问题进行量化而转换成客观的问题,如身高——“修八尺有余”,“外貌——形貌昳丽”,自信度——“明日徐公来,孰视之,自以为不如;窥镜而自视,又弗如远甚”,转化成客观问题后我们可以得到各个解的分数,通过比较分数,我们就能知道如何取舍如何优化。这个转化过程叫做问题的建模过程,建立的问题模型实际上是一个函数,这个函数对优化算法来说是一个黑盒函数,即不需要知道其内部实现只需要给出输入,得到输出。

        在优化算法中这个黑盒函数叫做 适应度函数 , 优化算法的求解过程就是寻找适应度函数最优解的过程 ,使用优化算法时我们最大的挑战就是如何将抽象的问题建立成具体的模型,一旦合适的模型建立完成,我们就可以愉快的使用优化算法来求解问题啦。(“合适”二字谈何容易)

        优化算法的大致介绍到此结束,后面我们会依次介绍常见、经典的优化算法,并探究其参数对算法性能的影响。

——2019.06.20

[目录]

[下一篇 优化算法笔记(二)优化算法的分类]

❼ 优化算法笔记(十七)万有引力算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
万有引力算法(Gravitational Search Algorithm)是受物体之间的万有引力启发而提出的算法。算法提出于2008(2009)年,时间不长,不过相关的文章和应用已经相对较多,也有不少的优化改进方案。
万有引力算法中,每一个物体的位置代表了一个可行解,而物体的质量则反映了该位置的好坏,位置越好的物体的质量越大,反之物体的质量越小(质量由适应度值计算出,不是直接相等)。物体在解空间中的运动方式由其他物体的引力决定,质量越大的物体,在同等引力作用下的加速度较小,所以单位时间内的速度也相对较小,位移距离较短,反之加速度和速度都较大,位移距离较长。故可以简单的认为, 位置越优的个体的移动速度越慢,位置越差的个体的移动速度越快

万物之间皆有万有引力,不过在我们谈到万有引力之时,对象大多是天体,否则万有引力太小可以忽略不计。所有这次我们的主角就是天体了。(总不可能是苹果吧)。

每一个天体都有个属性:位置X,质量M,加速度A,以及速度V,还有适应度值F。
在D维空间内有N个天体,其位置为

,加速度

,速度

,其适应度值为


第i个天体的质量则是根据其适应度值计算得出:

其中M为天体的质量在群体重质量中的占比, 分别表示全局最差天体的适应度值和全局最优个体的适应度值。
可以看出,处于最优位置的天体的质量m为1,最差位置的天体的质量m为0。当最优天体和最差天体重合时,所有的天体的质量m都为1。

由万有引力计算公式和加速度公式可以计算出当前天体收到另一个天体万有引力而产生的加速度:

其中R表示第i个天体和第j个天体之间的欧式距离,aij为天体i在第d维上受到天体j的万有引力而产生的加速度,ai为第i个天体受到的其他所有天体万有引力的合力产生的加速度。G为万有引力常量,可以根据一下公式计算:

其中G0为初始值,T为最大迭代次数。

计算出了天体的加速度,则可以根据当前速度计算出下一步天体的运行速度以及天体下一步的位置。

这一步比较简单与粒子群、蝙蝠等有速度的算法一致。

可以看出万有引力算法的流程异常的简单,与经典的粒子群差不多。万有引力算法也可以看做是一个优化改进版的粒子群,不过设计比较巧妙,引入的质量、加速度等概念,但实现仍然很简单。万有引力算法的效果如何,在下一节将会进行实验测试。

适应度函数 。
实验一:

从图像中可以看出,各个天体都在不停的运动,由于没有贪心算法(优于当前值才改变位置)的加入,所以个天体有可能运动到比原先位置更差的地方,而且其收敛速度也比较快。
从结果上看,似乎还不错,受到最差值的影响均值也相对较大,算法结果的稳定性不是太好。
直觉上感觉算法有点问题。根据物理得来的直觉告诉我,这些天体会相互靠近,所以,它们不会集中到它们所构成的凸包之外, 凸实心物体的质心不会跑到该物体的外部 。做个试验验证一下,将测试函数的最优解设置到一个极端的位置。
实验二 : 适应度函数

这次最优解位置在(90,90)处,该点有很大概率出现在初始天体所围成的凸多边形外。

从图像中可以看出,在天体们还没有到达最优位置附近(右下角的红点)时,它们已经收敛于一个点,之后则很难再次向最优解靠经。看结果可以发现几乎每一次实验的结果都不太好,算法果然有点问题,不过问题不大。
万有引力出现这种现象可能有两个原因: 1.算法收敛的太快 ,还未对全局进行充分搜索之时就收敛到了一点,收敛到一点后无法再运到。 2.算法没有跳出局部最优的策略 ,万有引力作用下的天体慢慢聚集到奇点,形成黑洞,无法从中逃离。
那接下来,对万有引力算法的改进方向也比较明确了:1.减缓其收敛速度,2增加跳出局部最优操作,使之逃离黑洞。
看看万有引力常量G的函数图像

将万有引力常量的值修改为随着迭代次数线性下降,从图像中可以看出,效果还是比较明显的,天体在不断的运动,最后才收敛、聚集于一起。从实验结果也可以看出,算法相对稳定。结合图像可以知道,改进后,算法的收敛性下降,但全局搜索能力有较大的提升,算法的结果不会很差但是精度较低。

将万有引力常量的下降趋势放缓为原来的1/4,从图像中可以看出,算法的收敛速度非常快,也得到了较好的结果,相比线性下降,算法有着更好的精度,不足之处则是没有跳出局部最优的操作,收敛过快也容易陷入局部最优。
不知道原文为什么让万有引力常量G的如此快的降到0,明明降的更慢能有更好的全局搜索能力,但精度可能较差。猜测如果精度较差则在测试函数结果和曲线上比不赢对比的其他算法,论文没法发了。其使用的测试函数的最优解大多处于解空间的中心位置附近,即很少出现最优解在天体所围成的凸多面体之外的情况,而实际问题中我们是无法预知最优解在个位置的。
接下来,将试着为万有引力算法加入一点跳出局部最优的操作。

实验四 :改进,新增以下规则及操作
在实验二的条件下
1 . 处于最优位置的天体保持自己的位置不动.
2 . 如果某一个天体的运动后的位置优于当前全局最优个体的位置则将当前的最优个体初始化到解空间的随机位置.(将被自己干掉的大哥流放)。
3 . 如果触发了规则2,将所有的个体的以迭代次数重置为0,即计算G=G0*e^(-20t/T)中的t置为0,重新计算万有引力常量,若未触发条件2则t=t+1。

从图像上看,算法的全局搜索能力有大幅的增强,并且已经集中到了最优解的附近,而且由于加入了“流放”这一跳出局部最优的操作,可以看出,不断的有新的个体出现在距最优位置较远的位置。不过收敛速度有所下降,因此局部搜索能力有一定减弱。
看结果,好像没有实验三那么好,但与实验二相比,已经有了很大的提升,而且有了跳出局部最优的操作,结果也相对稳定。
上述的实验仅仅是对直观猜想的实现,如果想以此为改进点,还要对其进行大量的调优,相信会有不错的结果。

万有引力算法根据万有引力提出,结合了牛顿第二定律,可以说其操作步骤与真实的物理规律非常的贴切。不过就像前文说过,受物理现象启发而来的优化算法其性能是未知的,因为它们不具备智能,只有着规律,有规律就会存在弱点,就会有搜索盲区。宇宙那么大,肯定存在没有任何天体到达过的空间。
不过由于万有引力算法流程简单,理解方便,其优化方案和能改进的地方相对较多。万有引力算法的收敛速度过快,导致其全局搜索能力较弱而局部搜索能力很强,容易陷入局部最优。根据其特点,我们可以降低其收敛速度或者增加跳出局部最优操作,来平衡算法的各个性能。

参考文献
Rashedi E , Nezamabadi-Pour H , Saryazdi S . GSA: A Gravitational Search Algorithm[J]. Information Sciences, 2009, 179(13):2232-2248. 提取码:xhpa

以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(十六)混合蛙跳算法
下一篇 优化算法笔记(十八)灰狼算法

优化算法matlab实现(十七)万有引力算法matlab实现

❽ 优化算法笔记(二十六)和声搜索算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
和声搜索算法(Harmony Search)是受音乐中的和声启发而提出的启发式算法,其提出(发表)年份为2001年,算是一个比较老的算法了。和声搜索算法放在现在,其性能非常一般,不过它提出了一种领域搜索的具体实现方式,可以和不同的算法融合,提高其他算法的性能。

单独看一个和声意义不大,一个和声的一个维度会根据群体中该维度的所以取值来确定其领域范围,然后再进行领域搜索。

原算法受音乐启发,所以它所解决的目标问题也是离散的问题。
和声搜索算法中的一个个体被称为和声记忆(Harmony Memory,HM),群体中和声记忆的数量为N,每个和声记忆中的音数(维度)为D。每一维的取值范围为 。

原算法中每个维度的取值范围L是一组有序的离散的值,即在指定的变量值中选取一个作为和声记忆的值。
每个和声记忆每次迭代只能变为其领域的值。
和声算法中有两种操作:1.移动到领域,2.变异到领域
其概率分别为Harmony Memory Considering Rate(HMCR)和Pitch Adjusting Rate(PAR)。
其中HMCR取值约为0.95,PAR取值约为0.10。
可以看出该算法的步骤和数值参考了遗传算法,而且两者都是为了处理离散问题。

例子如下:
和声记忆的数量为3,维度为2,其中第1维的取值范围为{A,B,C,D,E,F,G},第2维的取值为{3,4,5,6}。
第1代,三个个体的取值如下

在计算第2代时,每个个体的每一维只能去到该维度的邻域的值。
个体1_2能取到的值为(A,3) (A,4) (B,3) (B,4)
个体2_2能取到的值为(F,4)(F,5)(F,6)(G,4)(G,5)(G,6)
个体3_2能取到的值为(C,3)(C,4)(C,5)(D,3)(D,4)(D,5)(E,3)(E,4)(E,5),

图中标出了这三个个体能够到达的邻域。

变异到邻域到操作也很简单,该操作是对标了遗传算法中的变异操作。
变异到邻域操作时,该维度不会变异到当前已有的值。
如个体1_1变异第1维,由于群体中第1维的取值为{A,D,G}故该维度只能取到{B,C,E,F}。
下图中标有颜色的块出了变异操作无法到达的位置,空白位置为变异操作能够到达的位置。(如果没有空白位置呢?概率非常小,毕竟个体位置远少于解空间位置,如果出现了,不变异或者随机一个位置都行)

迭代过后,如果新的位置更好,则保留该和声记忆,并去除最差的和声记忆。
最后文章给出了判断找到的解是否是最优解的判断函数

其中Hr=HMCR,Hi会在该维度找到更好值时随着迭代次数递增。该公式的作用主要是为了判断何时去结束算法程序,不过在之前我们都是使用的最大迭代次数来结束算法程序,所有好像没多大用处。
算法的流程也挺简单的:

和声搜索的原算法是根据音乐中和声概念提出的,音符是离散的,所有算法也是离散的,对标遗传算法用于处理离散解空间问题,那么如何修改和声搜索算法使其能处理连续数值问题呢?
最关键的点是如何处理“邻域”,在连续解空间上,很难定义出一个点的领域,而且每个维度上的取值数量也是无穷的。
为和声搜索算法定义邻域也有几种思路:
1 . 将所有的个体定义为该个体的邻域,即每次随机从群体中选择一个个体,该维度移动到所选中的个体处。

其中D,E,F分别为AB,AC,BC的中点,A,B,C三个和声记忆的邻域将由DEF这三个点及解空间边界决定,此时的邻域比思路2中的更小,也不会出现重叠部分。
当某一维度的两个领域值相等时,上述(二维)的邻域(面)将会退化成邻域(线),可能会导致该维度快速收敛到该值,故此时需要忽略重复值,将邻域重新展开(成为面)。
在连续算法中,当满足HCMR条件时,算法将根据上面的色块在邻域中随机选择一个值;当满足PAR条件时,由于无法剔除指定值,简单起见,直接移动到随机的和声记忆的该维度。
后续的实验由于是求解连续函数最值,故会选择上述连续算法中的三种思路来进行。

适应度函数 。
实验一 : 思路一

从图像可以看出,思路一的策略与遗传算法非常的相似,移动路线类似于十字架,最终也收敛到了正解附近。前期搜索主要靠邻域移动,后期移动则是靠变异。

从结果也可以看出与遗传算法的差距不大,算法不是很稳定,其策略是飞到相邻的和声记忆上,所以跨越度比较大,精度全靠变异。

实验二 : 思路二

从图像中可以看出,种群的搜索路径不在像实验一中那样直来直去的十字路径,收敛的速度也慢了不少,但是仍能在正解附近收敛。

从结果中可以看出,思路二的结果好了不少,同时也更加稳定(误,运气好,之前实验出现过不好的结果,没能重现)。该思路的邻域搜索面积会更大,且个体之间的邻域存在重叠部分,故会有可能收敛于不好的位置,不过概率也较小。

实验三 : 思路三

图像逐渐贪吃蛇化!前期的图像与思路一相似,后期的图像有点类似遗传算法,可能是邻域的面积逐渐缩小成了长条状所致,不过最终“贪吃蛇”还是吃到了食物。

结果可以看出,思路三的稳定性不太行,当全部个体收敛到了一点后会开始进行思路一的替换操作,但无论如何替换都是相同的值,难以找到更优的位置,于是会出现一个较差的结果。这里也可以增加范围随机来跳出局部最优。

和声搜索算法是根据和声乐理知识提出的算法。由于音符是离散的值,算法也对标了遗传算法,故原算法也是针对离散问题提出的。在解决连续性问题时,需要对其邻域概念进行扩展和修改,最终的效果与遗传算法相差不大。
在现在看来,和声搜索算法的效果属实一般,对于其的针对性研究也不太多,该算法主要提出了其不同于遗传算法的遍历解空间的方式。所以在很多论文中都能看到用和声搜索算法与其他算法融合来进行改进的例子。
与遗传算法相比,和声搜索算法的邻域概念,将遗传算法的基因由线扩展到了面上。这一点有点类似于SVM和卷积神经网络的关系,不过,遗传算法和和声搜索算法的差别并没有那么大,只是搜索方式不同罢了。
参考文献
Geem Z W , Kim J H , Loganathan G V . A New Heuristic Optimization Algorithm: Harmony Search[J]. Simulation, 2001, 2(2):60-68. 提取码:4udl
Omran M , Mahdavi M . Global-best harmony search[J]. Applied Mathematics and Computation, 2008, 198(2):643-656. 提取码:pk3s

以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(二十五)飞蛾扑火算法
下一篇 优化算法笔记(二十七)蜉蝣算法

❾ 优化算法笔记(七)差分进化算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
差分进化算法(Differential Evolution Algorithm,DE)是一种基于群体的进化算法,它模拟了群体中的个体的合作与竞争的过程。算法原理简单,控制参数少,只有交叉概率和缩放比例因子,鲁棒性强,易于实现。
差分进化算法中,每一个个体的基因表示待求问题的一个候选解。每次迭代将先进行变异操作,选择一个或多个个体的基因作为基,然后选择不同的个体的差分来构成差分基因,最后将作为基的基因与差分基因相加来得出新的个体。交叉操作将新的个体将于父代的对应个体交叉,然后进行选择操作,比较交叉后的个体与父代的对应个体,选择较优的个体保留至下一代。在迭代完成之后将选择种群中最优个体的基因作为解。
差分进化算法可以算是我所使用过的优化算法中大魔王级别的算法,虽然它每个方面都没有强到离谱,但是综合起来的效果好于大多数算法。它就像一个每个科目都能考到90分(百分制)的学生,虽然没门课都不是最优秀的,但是论综合,论总分,它有极大的概率是第一名。

在我研究优化算法的小路上,我的目标就是找到一个能打败大魔王或是能在大多数方面压制魔王的算法。

这次的主角就选魔王军吧(或者蚁王军,为了与蚁群算法区别还是叫魔王军吧),个体则称之为魔王兵。
魔王兵的能力取决于它们的基因,它们可以根据环境或者需要改变自己的基因使得自己更加强大,更方便的处理问题,问题的维度与基因维度相同。

表示第i个魔王兵在进化了第t次后的基因,该个体有D位基因。
与遗传算法同为进化算法的差分进化算法,它们的操作(算子)也都非常相似的,都是交叉,变异和选择,流程也几乎一样(遗传算法先交叉后变异,差分进化算法先变异后交叉)。

说到差分进化算法中的变异,我就想到一句论语 “三人行,必有我师焉。择其善者而从之,其不善者而改之。” ,其实这句论语已经向我们说明了差分进化算法的整个流程:
“三人行,必有我师焉”——变异,交叉。
“择其善者而从之,其不善者而改之”——选择。
差分进化算法中,当一个魔王兵变异时,它会先找来3个小伙伴,当然是随机找来3个小伙伴,避免同化。在一个小伙伴的基因上加上另外两个小伙伴基因之差作为自己的目标基因。其变异公式如下:

表示第i个魔王兵找到了编号为r1、r2和r3的三个魔王兵,当然了i、r1、r2、r3为互不相同的整数,F为缩放比例因子,通常 ,一般取F=0.5。 为第i个魔王兵交叉后的目标基因图纸,不过这是个半成品,再经过交叉后,目标基因图纸才算完成。
其实现在我们已经有了5个基因图纸了 ,接下来将进行交叉操作。由于变异操作,差分进化算法的种群中个体数至少为4,即魔王军中至少有4个小兵。

交叉操作中,魔王兵i会将目标基因图纸 进行加工得到 ,加工过程如下:

其中 。 为交叉概率,其值越大,发生交叉的概率越大,一般取 。 为{1,2,…,D}中的随机整数,其作用是保证交叉操作中至少有一维基因来自变异操作产生的基因,不能让交叉操作的努力白费。
从公式上可以看出交叉操作实际上是从变异操作得出的基因图纸上选择至少一位基因来替换自己的等位基因,得到最终的基因图纸。

选择操作相对简单,魔王兵i拿到了最终的基因图纸 ,大喊一声,进化吧,魔王兵i的基因改变了。它拿出了能力测量器fitness function,如果发现自己变强了,那么就将基因 保留到下一代,否则它选择放弃进化,让自己还原成 。

实验又来啦,还是那个实验 ,简单、易算、好画图。
实验1 :参数如下

图中可以看出在第20代时,群体已经非常集中了,在来看看最终得出的结果。

这结果真是好到令人发指,恶魔在心中低语“把其他的优化算法都丢掉吧”。不过别往心里去,任何算法都有优缺点,天下没有免费的午餐,要想获得某种能力必须付出至少相应的代价。
实验2:
将交叉率CR设为0,即每次交叉只选择保留一位变异基因。

看看了看图,感觉跟实验1中相比没有什么变化,那我们再来看看结果。

结果总体来说比实验1好了一个数量级。为什么呢?个人感觉应该是每次只改变一位基因的局部搜索能力比改变多位基因更强。下面我们将交叉率CR设为1来看看是否是这样。
实验3:
将交叉率CR设为1,即每次交叉只选择保留一位原有基因。

实验3的图与实验1和实验2相比好像也没什么差别,只是收敛速度好像快了那么一点点。再来看看结果。

发现结果比实验2的结果还要好?那说明了实验2我得出的结论是可能是错误的,交叉率在该问题上对差分进化算法的影响不大,它们结果的差异可能只是运气的差异,毕竟是概率算法。
实验4:
将变异放缩因子设为0,即变异只与一个个体有关。

收敛速度依然很快,不过怎么感觉结果不对,而且个体收敛的路径好像遗传算法,当F=0,时,差分进化算法退化为了没有变异、选择操作的遗传算法,结果一定不会太好。

果然如此。下面我们再看看F=2时的实验。
实验5:
将变异放缩因子设为2。

实验5的图可以明显看出,群体的收敛速度要慢了许多,到第50代时,种群还未完全收敛于一点,那么在50代时其结果也不会很好,毕竟算法还未收敛就停止进化了。

结果不算很好但也算相对稳定。

通过上面5个实验,我们大致了解了差分进化算法的两个参数的作用。
交叉率CR,影响基因取自变异基因的比例,由于至少要保留一位自己的基因和变异的基因导致CR在该问题上对算法性能的影响不大(这个问题比较简单,维度较低,影响不大)。
变异放缩因子F,影响群体的收敛速度,F越大收敛速度越慢,F绝对值越小收敛速度越快,当F=0是群体之间只会交换基因,不会变异基因。

差分进化算法大魔王已经如此强大了,那么还有什么可以改进的呢?当然有下面一一道来。
方案1 .将3人行修改为5人行,以及推广到2n+1人行。
实验6:
将3人行修改为5人行,变异公式如下:

五人行的实验图看起来好像与之前并没有太大的变化,我们再来看看结果。

结果没有明显提升,反而感觉比之前的结果差了。反思一下五人行的优缺点,优点,取值范围更大,缺点,情况太多,减慢搜索速度。

可以看出算法的收敛速度比之前的变慢了一点,再看看结果。

比之前差。

差分进化算法的学习在此也告一段落。差分进化算法很强大,也很简单、简洁,算法的描述都充满了美感,不愧是大魔王。不过这里并不是结束,这只是个开始,终将找到打败大魔王的方法,让新的魔王诞生。
由于差分进化算法足够强,而文中实验的问题较为简单导致算法的改进甚至越改越差(其实我也不知道改的如何,需要大量实验验证)。在遥远的将来,也会有更加复杂的问题来检验魔王的能力,总之,后会无期。
以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(六)遗传算法
下一篇 优化算法笔记(八)人工蜂群算法

优化算法matlab实现(七)差分进化算法matlab实现

❿ 老喻人生算法笔记20 犹豫:灰度认知,黑白决策

上一讲,我给你讲了,考虑问题要把理性思维和直觉思维综合起来。但在作决策的时候,我们还是容易犹豫不决。这一讲我们展开来聊聊,在认知和决策环节,我们应该遵循什么原则。

我要给你讲八个字:灰度认知,黑白决策。

我们在 A 计划内控点那一讲里,就说过一个完整的决策过程有四个重要的点,感知-认知-决策-行动。 理性思维和感性思维的区别 ,往往就是跳过了中间两个步骤, 直接从感知跑到了行动 。所以, 想要培养自己的理性思维,认知和决策两个环节至关重要 。

这一讲,我要带你用概率的底层思维,来重新理解应该怎么去认知,如何作决策。有了概率思维,你就能从“理解这件事很并激重要”,进化成“我知道该怎么做”。

我们先来回顾一下认知和决策。

认知,你对收集到的信息进行处理,你像分析官一样思考,评估各种选项。

决策,是指在各种选项面前,你像个指挥官一样,作出最终选择。

我说认知要保持灰度,那什么叫灰度呢?

灰色是处于白色和黑色之间的中间地带,有深灰、有浅灰。所以当我们想要准确描述它时,需要给它加上一个百分比。

灰度认知,是指你在分析选项的阶段,先不急于作非黑即白的判断,保持一定灰度,这个灰度最好有一个数值。绝亩袜

黑白决策,是说我们在形成最终决定时,必须有一个黑白分明的选择,不能模棱两可。但现实中,我们恰恰容易把两者弄混,在认知环节非黑即白,在决策环节犹豫不决。

认知阶段要保持灰度

要想深入理解这两个概念,我要带你来看一个有趣的案例。

上世纪 90 年代耐仿中期,铜价下跌厉害,加拿大因迈特矿业公司,在美国一个铜矿经营困难。所以,总公司想关闭这个矿,但也面临了很多阻力。这个矿有超过1000 名矿工,几乎是当地唯一的生意,要是关了,会给当地经济造成很负面的影响。而且关矿就等于承认决策失误,管理团队为了保全名声也不愿意关。

除了关闭铜矿,还有另外两个选择:

第一,是不在本地炼矿,把矿石运到加拿大,用新式熔炉提炼。

第二,是继续向北挖矿。因为这个铜矿的北部,可能还有很多矿藏。高管偏向于关掉,矿区经理偏向于继续经营,各方吵得不可开交,都想说服对方,会议开了几个小时,毫无进展,大家都很沮丧。

你看,是不是和我们的现实生活很像?一个难题出现,各种因素交织在一起,每个选择都各有利弊,很难一下子理清。

这时候,咨询公司有一个叫马丁的小伙子突然产生了一个想法。他提了一个问题:“这个选择必须具备怎样的条件,才能成为正确的答案?”

这就有意思了,小伙子一下子点中了关键。为什么这么说呢?大家在讨论选项的时候,都犯了一个错误,每个人都急于证明自己的选项是最好的,然后试图说服对方。

讨论是一个认知过程。我们刚才说了,认知要保持灰度,就是要全面评估各种选项的可能性。

如果每个人都固守自己的观点,就变成“黑白认知”了,大家死守自己的认知,反对别人的认知,而没有人真正去思考,每个方案的可行性、成本和收益。这个会议当然就没法进展下去了。

提出了这个问题的马丁,后来做了罗特曼商学院的院长,成为全球最有影响力的思想家之一。

马丁的办法高明在哪儿呢?他提倡对每一种可能性进行分析,我们把不确定的部

分尽可能确定下来,罗列出来。这样就能理性地评估,每个选项的优劣之处。一旦你开始这样想问题,你的思考方式就会转变。他把我们从 立场之争、非黑即白的对错之争 , 拉到了对事实的判定。认知阶段不要非黑即白,别把讨论方案变成了坚守立场。

当人们从“黑白认知”转为“灰度认知”,局面立即发生了转变,三个选项的问题也暴露出来了:

把矿石从海上运往加拿大这个选项,听起来不错,但一算账,费用太高了,远超预期,所以只能放弃。另外一个选择是扩大矿区,看起来也很有吸引力,但从技术上一研究,发现新旧矿脉之间有一个巨大的岩壁,打穿的成本太高了,所以也不可行。到最后大家发现,尽管“关掉铜矿”很艰难,却是唯一可行的选择。经过“灰度认知”这个过程,连反对者也不得不接受了这个黑白决策。

灰度认知的秘密是什么?

在 认知阶段 , 别把时间和资源浪费在非黑即白的争吵上 , 而是对每个选项进行灰度数值的确认。

当我们拥有一个观点时,不管多么自信,不管自己多么喜欢这个观点,都要意识到,这个观点不可能是百分之百正确的。既然如此,我们就要冷静地思考一下,这个观点的可能性到底是多大呢?这个数值,是介于0 和 100%之间的,这就是灰度认知。

灰度认知的底层是概率思维。不管你的某个信念多么坚定,都要在前面加上一个概率数值。

可信度加权

我们总有一个错觉,认为厉害的人做什么都能成功,其实并非如此。

达利欧的公司,是世界上最大的对冲基金,其实他犯过很多惨重的错误。这使得他重新制定了公司作决策的方法,也就是后来被很多人提及的可信度加权。用了这个方法,桥水基金的投资决策质量大大提高了,而且非常稳定。这个方法非常有价值,虽然《原则》这本书很火,但真正理解这个概念的人很少。我觉得很有必要好好解

释一下,这就是一个典型的“对灰度估值”的决策方式。

具体他们是怎么做的呢?

“加权”的意思就是“乘以权重”,举个例子,你要开一个家庭会议,就要不要买洗碗机表态,但是每个人的意见权重不一样,比方说太太的权重是 50%,老公的权重是 25%,小孩的权重占 25%。最后统计的时候,太太的一票,就相当于老公的两票。

听起来很简单吧,其实达利欧在桥水基金采用的工作方法就是这样:

这群专家都有表达意见的权利,但根据每个人过往的表现不一样,给每个人的意见权重也不一样, 对于那些 能力更强的决策者的观点,赋予更大的权重 。最后经过简单的计算,得出一个群体意见。2012 年,桥水基金公司内部讨论关于欧债危机的决策难题,结果意见形成分歧,一半儿的人认为欧洲央行会印更多钞票来购买债券,另外一半儿人则反对。怎么办呢?运用可信度加权的分析系统来打破僵局。这不是无差别的民主,也不是独裁,而是把每个人的可信度纳入考量。

具体办法是 ,他们先用自己发明的集点器工具, 收集大家对一个问题的不同想法,可能会收集好几十种。

然后其他人就可以对你的想法打分 , 再给打分的人赋予一定的权重。 比如达利欧就说,一个实习生对他的想法打了 3 分,而满分是 10 分,也就是很差的意思。

但是因为这个实习生的资历比较浅,他打出来的分数权重不会太高。可能另一个权重高的人,赞同达利欧的这个想法,这个想法的得分依旧会比较高。就这样,经过一系列的计算,再算出来这些想法的得分,最后得到一个群体决策的结果。这就是一次可信度加权决策程序。

后来,桥水基金果然正确预测出欧洲央行会印更多钞票。

独立思考是很重要,一个聪明人的思考是很有价值的。 但更好的办法是有一群独立思考者,对他们的判断进行加权。你就会长期得出比任何一个人,质量更高、更稳定的判断。

我们再来看看什么叫黑白决策。

黑白决策就是要敢拍板,作出非黑即白的决定,不要模棱两可、犹豫不决。决策者是要为其他人负责的。就像在战场上打仗, 指令必须清晰,黑白分明,不能含糊。这就是领导的意义和价值 。所以,对于决策者来说,所承担的责任就是,告诉伙伴们,这件事做还是不做。

本讲小结

事实上,这个世界上所有的知识都具有不确定性,包括这句话本身。

面对不确定性,我们只有容忍不确定性的存在,用灰度的方法去认知,去尽量测量它的灰度数值,才可能向真理逼近一步。

灰度认知,就是开放地考虑各个维度的选项,并赋予权重。

黑白决策,就是根据计算结果,给出清晰果断的选择。

其实,做好了灰度认知,黑白决策也不是什么难题了。

从达利欧公司的决策方法中,我们可以得到启发,一群专业人士的意见加权,远远比一个人更可靠。所以,我们可以为自己打造出一个专家意见团,在不确定的复杂决策面前,提高我们的胜率。

在现实中,我们要敢于决策,不要犹豫不决。只有作出决策,人生才会在你的面前展开。

思考题

如果你有个朋友被医院检查出了重病,但是去另一家医院复查,医生却说没病。用今天讲到的可信度加权的办法,你可以建议他怎么做?

划重点

灰度认知就是分析各种选项的权重,给它们的可能性估值。黑白决策是决策环节,要清晰果断地给出结论。

认知环节不要为了立场,非黑即白地搞辩论,而是要去分析每种可能性的灰度。

你可以用可信度加权的工具,避免个人决策的偏差,提高正确率。

热点内容
网盘存储api 发布:2025-08-26 04:20:34 浏览:751
提高光纤上传速度 发布:2025-08-26 04:06:14 浏览:437
shell脚本等待 发布:2025-08-26 04:06:02 浏览:153
shell脚本的for 发布:2025-08-26 03:33:46 浏览:685
骨关节广告脚本 发布:2025-08-26 03:18:13 浏览:669
免费java培训 发布:2025-08-26 03:13:49 浏览:753
iphone软件存储满 发布:2025-08-26 03:08:26 浏览:994
misc是什么文件夹 发布:2025-08-26 02:49:03 浏览:346
缓存视频最快的软件 发布:2025-08-26 02:45:11 浏览:159
android卡刷 发布:2025-08-26 02:42:41 浏览:316