正弦餘弦優化算法[記錄]

       之前整了一篇花朵授粉算法,本來打算最終應用的時候用那個,結果發現花朵授粉算法還是參數比較多的。所以選擇了這個正弦餘弦優化算法(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,可以參考一下。

    具體實現流程跟其他類似的算法(遺傳算法、粒子羣算法、花朵授粉算法)差不多,就是把迭代公式換成這個就行了。具體學生狗搞數學建模的時候用慣了遺傳算法或者粒子羣算法的話,用這個試試效果差不多,勝在參數比較少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章