【技術分享】粒子群演算法(總)

  • 2019 年 10 月 7 日
  • 筆記

木又連續日更第5天(5/100)

這個演算法是啟發式演算法,可以用來求解最優參數。

試想一種情況,一群人分頭去找金礦,每個人每隔一段時間會報告自己的位置以及探測到距離金礦的遠近、金礦藏量,由於可能存在多處金礦,人們不想錯過千年一遇的發財機會,即使知道別人P距離某個金礦A很近、金礦藏量很多,也不會立即掉頭走向P,會繼續探測,可能會向著P的方向靠近,與此同時,繼續等待其他更好的訊號,最後,每個人都找到或者共同找到一處金礦。這些金礦,肯定有一兩個金礦藏量特別豐富!

可以看到,粒子群演算法的所有粒子會時刻注意全局最優點,進而調整自己「步伐」。

那麼怎麼實現呢?

公式為:

v_new = w * v_old + C1 * random(0, 1) * (p – x) + C2 * random(0, 1) * (pg – x)

x_new = x + v_new

其中,x是現在位置,x_new是新位置,v_new是新速度,v_old是原來的速度,w是維持這速度的慣性,C1、C2是學習因子,p為該粒子歷史最優位置,pg為所有粒子的全局歷史最優位置。看到部落格都建議設置w在0.4-0.9之間,設置C1、C2為2。