如果你之前有去了解過粒子群算法,但苦于冗長的解釋與晦澀的代碼,你始終無法較為清晰的了解這個算法。這次我就帶着大家來過一遍這個看似複雜實則簡單的“鳥”算法。
首先假象你是一隻正在覓食的鳥,你不知道食物(即最優解)在哪,要在這茫茫無際的天空中尋找食物并不是一件容易的事情。不過好在天上有一群鳥陪你共同尋找這個食物的所在地。任何一隻距離食物最近的鳥都會告訴同類自己的位置,以此吸引同類過來。
以上就是粒子群算法的兩個核心:
目前時間下距離食物最近的位置會影響你的飛行方向(即
目前最優解)。
所有時間下距離食物最近的位置會影響你的飛行方向(即
曆史最優解)。
我們繼續往下說。倘若我們要把這個思想運用到計算機中,我們就會發現這和現實中真正的鳥類尋找食物的過程不一樣:
首先,随機産生的點(“鳥類”)并不知道自己與最優解(“食物”)的距離,隻能假設目前所有解中的最大值或最小值為最優解所在的位置(粒子群等啟發式算法多用于求解最大值或是最小值的優化問題),給其他鳥類提供參考。
然而每隻鳥類都比較“固執”,就算知道目前最優解的所在位置,也隻會對這個方向進行選擇性的聽取,至于聽多少全取決于那隻鳥的“心情”。這就是為什麼粒子群算法在速度更新的公式中,既引入了學習因子的概念,又對學習因子乘以一個rand随機數。
其次,當随機生成的解(即随機生成的“鳥”)成為目前時間段内的最優解的時候,此時沒有目前最優解、曆史最優解對其進行引導。是以我們引入慣性系數w來對這個解進行更新。
綜上所述,每隻“鳥”移動速度的更新受三個因素的影響:目前最優解、曆史最優解、慣性系數。即下面第一個公式。
然後依據每隻“鳥”(每個最初随機産生的解)目前的位置加上目前更新的速度,即為每隻“鳥”更新後的位置所在。
粒子群算法關于速度更新和位置更新的公式:
最後隻要設定最大疊代系數。設定每隻“鳥”的速度上限與速度下限以及每隻“鳥”的位置上限與位置下限,對鳥類更新的資料進行一定限制,然後不斷的重複下列步驟即可得到最優解:
① 得到目前最優解與曆史最優解
② 通過慣性系數、目前最優解、曆史最優解這三個因素對每個解的位置資訊進行更新
③ 回到第一步,直到抵達最大疊代系數
④ 最後得到該算法下的最優解
算例分析: 結果展示: 粒子群算法的優缺點:優點:可以處理傳統方法不能處理的案例,如不可導的節點傳遞函數或者沒有梯度資訊的存在。更多應用于神經網絡。
缺點:性能一般,網絡權重編碼和遺傳算法選擇比較麻煩。
若有疑問可掃描文末二維碼進群咨詢。
出品/TES工作室
https://qm.qq.com/cgi-bin/qm/qr?k=TRB-6OpqAI38NqiGYjBUtQHco2e-NeuH&authKey=q8YI9ZKndoap2rbdwBlit8vZA68+zbw7ueGZL2Ubkjq0IbuKh5ARI1q5lY338xlQ&noverify=0 (二維碼自動識别)