第一篇文章放下完美,接受啟發式方法提供的足夠好解;第二篇攀越看不見的山,觀察局部搜尋、重啟和模擬退火如何在崎嶇適應度地景上移動。第三篇引入的新角色,不是孤獨的登山者,而是一個群體。
與其讓一位天才獨自解題,如果有一群能力不錯、只分享足夠資訊的思考者,結果會如何?
這個想法正是群體智能的核心。
螞蟻的早上通勤
炎熱日子,一列螞蟻在公園長椅下發現掉落的曲奇。牠們沒有地圖、領袖或白板計劃,數分鐘後卻形成一條由巢穴通往食物的密集有效路徑。
其機制來自簡單規則:
- 每隻螞蟻遊走,找到食物後留下費洛蒙,並偏好費洛蒙較強的路徑。
- 較短路線被走得更頻密,所以費洛蒙累積更快。
- 較長繞路因蒸發及較少螞蟻補強而逐漸消失。
群體之所以「計算」出好路徑,不是因為任何一隻螞蟻特別聰明,而是整個系統共同放大有效選擇,並遺忘無效選擇。
這就是蟻群最佳化(Ant Colony Optimization,ACO)的設計模式:
- 多個代理探索一張圖,例如道路、網絡連結或配送路線。
- 每個代理提出一條路線,並按品質——較短距離、較低成本或較高收益——留下虛擬費洛蒙。
- 演算法偏好費洛蒙較高的邊以利用目前知識,同時保留隨機探索及費洛蒙蒸發。
好路線得到「愈富愈富」的增強,差路線則退出集體記憶。不過增強過強亦會令群體過早集中於一條次佳路徑,所以蒸發率與探索機率十分重要。
一個真正成功的課室小組專案
想像教師要求全班設計學校時間表,盡量滿足:教師不能同時在兩間房、學生不應連續三堂重科,而且所有課堂下午四時前結束。
教師不讓一名學生獨自用試算表苦戰三晚,而是:
- 把全班分成十組;
- 給每組相同模板,但採用不同隨機起始時間表;
- 設定簡單規則:
- 每輪可以複製另一組時間表中欣賞的部分;
- 亦可自行作小修改,例如交換兩堂或移動一個時段;
- 每輪結束後公開衝突總數及一個有效技巧。
數輪之後,沒有任何一組掌握完整答案,但好構想會傳播,失敗構想則因沒有人複製而消失。最後方案不是任何人的純粹創作,而是群體產物。
把課室換成程式,這個過程便接近遺傳演算法或粒子群最佳化等族群式啟發法。
由鳥群走到粒子:PSO 的直覺
想像一群鳥在大田中尋找散落種子。每隻鳥知道目前位置,記得自己見過最多種子的地點,也留意鄰居發現的最佳位置。牠按三種作用調整速度:
- **慣性:**大致保持原來方向;
- **個人拉力:**移向自己曾見的最佳位置;
- **社會拉力:**移向群體目前的最佳位置。
這就是粒子群最佳化(Particle Swarm Optimization,PSO)的核心:
- 每隻鳥成為一個代表候選解的粒子。
- 田野是搜尋空間,例如模型參數、機械人控制增益或定價決策。
- 種子代表高適應度,即低誤差、低成本或高收益。
PSO 把山上一位登山者換成一群粒子。它們探索不同山坡和山谷,各自保存最佳高度,再共享全群看過的最佳位置;位置雲通常逐步收縮到有潛力的區域。
一張圖中的 PSO
在簡單二維地景中,水平與垂直軸是兩個決策變量,顏色代表目標值。可以想像四張快照:
- 初始化()
- 三十個點隨機散佈。
- 每點有一個方向與長度隨機的速度箭嘴。
- 早期探索()
- 粒子開始漂移。
- 部分粒子經過高值區,記錄為個人最佳。
- 一個靠近高峰的粒子建立目前全局最佳。
- 中段()
- 小群粒子圍繞多個有潛力山丘。
- 速度同時指向個人與群體最佳。
- 少數粒子仍大範圍遊走,保留探索。
- 後期收斂()
- 大部分粒子聚集於同一盆地。
- 速度縮小,由大幅越過轉為細微調整。
- 群體先粗略廣搜,再在小範圍精搜。
PSO 不是在同一位置執着爬山,而是一種由集體記憶引導、逐步穩定的遊走。
實際更新常寫成
其中 控制慣性, 是粒子個人最佳, 是群體最佳, 是隨機係數。參數或速度限制選擇不當時,粒子可震盪、發散或過早聚集。
何時使用群體方法
群體不是魔法,也不是免費。它們以精確保證換取穩健探索與平行性,特別適合:
- 地景非凸、帶雜訊、不連續或充滿誤導山谷;
- 梯度不可得、不可靠或計算昂貴;
- 多個候選可在 GPU、cluster 或雲端平行評估;
- 重點是找到強而可行的解,而不是證明全局最優。
如果目標平滑、凸而且導數容易取得,經典梯度法通常更快、更乾淨。如果任務需要嚴格保證,或記憶體與評估預算極少,維持一整個群體亦可能不合適。
「目標評估昂貴」並不自動表示群體最好:群體每輪需要很多次評估。只有在這些評估可平行,或多點探索能明顯減少錯過好區域的風險時,額外成本才合理。
局部、退火與群體方法比較
| 方法 | 核心概念 | 優點 | 缺點 |
|---|---|---|---|
| 局部搜尋/貪婪 | 每步局部向上 | 簡單、快速、每步便宜 | 容易困在附近山丘 |
| 模擬退火 | 有時接受較差移動 | 可逃離陷阱,探索程度可調 | 對冷卻排程敏感,只有一條軌跡 |
| PSO/ACO 等群體方法 | 多個代理分享部分資訊 | 可平行、對崎嶇地景較穩健 | 參數更多,每輪開銷較高,可能過早收斂 |
目的不是選出普遍冠軍,而是讓方法配合問題結構。若世界像一位登山者身處霧山,局部搜尋可能足夠;若像廣闊田野散佈多條線索,群體方法便更有吸引力。
小型思想實驗:調校機械人
假設要調整循線機械人的三個 PID 增益:比例、積分及微分。每組設定都要上載程式、讓機械人跑一圈,再按平順、速度與穩定程度評分。
可行方法包括逐個參數手動調整、在電腦執行模擬退火,或概念上使用一個群體:
- 每個粒子是一組 ;
- 每次測試數個粒子,先用模擬器,再間歇作真機測試;
- 群體記住有效設定,逐步聚集到好區域。
即使沒有真正寫 PSO,群體式思考仍有用:同時保存數個候選控制器、共享「這個 範圍總是不穩定」等資訊,再收窄到多個候選都表現良好的位置。
這就是以人與便利貼實作的群體引導搜尋。要令研究可信,還需在獨立軌道及擾動下評估,避免群體只對用來調校的路線過度擬合。