正弦余弦优化算法[记录]

       之前整了一篇花朵授粉算法,本来打算最终应用的时候用那个,结果发现花朵授粉算法还是参数比较多的。所以选择了这个正弦余弦优化算法(Sine and Cosine Algorithm)。这个算法具体实现的时候基本上可以认为是没有参数,也就是说除了个群大小,迭代次数之类的这种优化算法必要的参数以外,可以当做是不存在其他参数的。

       首先简单介绍一下正弦余弦算法,这个算法是澳大利亚学者Mirjalili提出的。这个人在这类优化算法中真的是很厉害,像鲸鱼优化算法,多元宇宙算法,包括这个正弦余弦算法,都是他提出的。给我的感觉就是,这类算法大部分在寻优的时候,分为两部分,也就是局部挖掘和全局搜索。这两个部分相互促进又相互矛盾,全局搜索用于快速定位最优解的范围,而局部挖掘用于寻找最优解,这两者必须达到一种动态平衡的状态。全局搜索过多的时候,运行会特别慢,尤其是用MATLAB这种不擅长循环的软件;局部挖掘过多的时候,就容易陷入局部最优解,当然实际工程里,全局最优解可能真的不容易找到,尤其在一些非凸问题里,局部最优解也凑合。

      现在重点说一点这个正弦余弦算法。算法第一步要定义什么最大迭代次数啊,什么种群大小(或许不是这个名称)什么的。第二步就是可以直接计入迭代了。用下面这个公式

                                        

    里面X是种群,t是当前迭代次数,X*是上一代最优解。算法的重点是r1到r4这四个参数,这四个参数除了r1,其他都是随机数!!!这一点非常喜欢,不用为算法参数考虑太多不像上次整的花朵授粉算法,需要一堆参数。r2说是范围在[0,2pi],但是看r2在三角函数里面,所以r2可以随机取任何值。r3是[0,2]控制和最优解的距离,保持种群的多样性。r4是转换概率,范围是[0,1]控制迭代是用正弦函数还是余弦函数。r1用下面这个公式来算

                                                                        

    a设置个大于0的数就可以了,也忘记了在哪个文献里看的,a=2,可以参考一下。

    具体实现流程跟其他类似的算法(遗传算法、粒子群算法、花朵授粉算法)差不多,就是把迭代公式换成这个就行了。具体学生狗搞数学建模的时候用惯了遗传算法或者粒子群算法的话,用这个试试效果差不多,胜在参数比较少。

你可能感兴趣的:(智能算法)