---
# System prepended metadata

title: 群體智慧期末報告

---

# 群體智慧期末報告
* M093040061 劉景翔

## Water Wave Optimization
* Author: Yu-Jun Zheng
* Published on: Computers & Operations Research 
  Volume 55, March 2015, Pages 1-11

## 簡介
* 以水波傳播的原理發想
* 使用三種 operator：
    * 傳播 (Propagation)：
      在自己周圍一定範圍搜尋
    * 折射 (Refraction)：
      向 global best 靠近
    * 碎浪 (Breaking)：
      Global best 進行的 local search
* 每一 generation 每一「水波」依照條件選擇三種 operator 之一執行

## 傳播 (Propagation)
![](https://i.imgur.com/CiTokYf.png)
* $x'(d)=x(d)+rand(-1,1)\cdot \lambda L(d)$
  在以自身為中心，半徑為邊界寬的一定比例的範圍內隨機搜尋
* $\lambda'=\lambda \alpha^{-(f(x)-f_{min})/(f_{max}-f_{min})}$
* $\lambda_0=0.5$
  該比例以某種方式遞減，解越好，遞減速度越快，範圍越小

---

![](https://i.imgur.com/xbBza5r.png)
* 如圖所示，如果搜尋到較佳的解，則解進行「傳播」，即變為候選解，並將浪高恢復到事先設定的最大值
* 如果搜尋到較差的解，則「浪高」遞減，直到浪高減少到零，即用完機會，進入「折射」環節

## 折射 (Refraction)
![](https://i.imgur.com/zeChMlR.png)
* $x'(d)=N((x_{best}(d)+x(d))/2, |(x_{best}(d)-x(d))/2|)$
  失去所有機會的水波向 global best 靠近，移動到的位置遵守一常態分布，其以兩者中心為分布高點，以兩者距離的一半為一倍標準差

## 碎浪 (Breaking)
![](https://i.imgur.com/jtn8CxM.png)
* $x'(d)=x(d)+N(0,1)\cdot \beta L(d)$
  每當 global best 有進一步突破，其進行一次落點以自身為中心呈現常態分布的搜尋，標準差為邊界寬的一定比例

## 演算法參數
以下是論文的實驗使用的參數：
* $p=50\rightarrow3$
  population size 由 50 往 3 線性遞減
* $h_{max}=6$
  最大浪高為 6，作者說 5 ~ 6 都有不錯的效果
* $\alpha=1.026$
  影響「傳播」範圍縮減率的參數，是針對測試函式集 fine tune 的結果
* $\beta=0.25\rightarrow 0.001$
  影響「碎浪」範圍的參數，由 0.25 線性遞減至 0.001，是針對測試函式集 fine tune 的結果
* $k_{max}=min(12, D/2)$
  「碎浪」最高改變維度數為總維度的一半，如果超出 12 則最多改變 12 維

## 修改
### 概念
* 簡化複雜而不必要的部分
* Self adaptive
* 內建的 population reduction
* Autoregulation

### 合併「傳播」與「碎浪」
「傳播」與「碎浪」的概念過於相像，都是在自身周圍以一個半徑進行搜索，其不同的點如下：
* 在讓範圍比例常數縮減的方法部分，「傳播」是透過指數方式遞減，「碎浪」則是線性遞減
* 在搜尋落點的分布上，「傳播」是均勻分布，「碎浪」是常態分布

合併的方式如下：
* 不使用比例常數，改用 searcher 之間的距離作為搜尋範圍，達成 self adaptive 與 autoregulation
* 整個演算法的搜尋分布暫時設定為均勻分布

合併後的公式如下：
* $x'(d)=x(d)+rand(-1,1)\cdot(x_{rand}(d)-x(d))$
  即是隨機找尋另一 searcher，並以與其的距離作為半徑搜尋自身周圍

### 修改「折射」的公式
* 對 PSO 進行實驗並觀察可以發現，在大多數問題上，global best 的參數會恰好落在 2.0 上。推測這是因為 2.0 時該項造成的搜尋分布是以 global best 為中心。這同時也是合理的搜尋方式
* 本演算法在向 global best 靠近時，分布的中心點落在自身與 global best 的中點，但此點並沒有任何會出現好解的跡象，反而會造成群體中心不能對準較佳的位置
* 前段決定將常態分佈的元素暫時移除，以均勻分布代替
* 全員以 global best 為中心會造成過早收斂，因此將 global best 替換成隨機比自身好的 searcher
* $x'(d)=x_{randbetter}(d)+rand(-1,1)\cdot(x(d)-x_{randbetter}(d))$

### 「浪高」機制的修改
「浪高」是使搜尋能在自身周圍與向 global best 前進之間切換的機制，其有一些特性：
* 在搜尋周圍時需要新解比自身好才取代，但在向 global best 靠近時不需要。此點有利有弊，PSO 和 DE 分別採取不同的做法，雖然概念不盡一致
* 此機制需要一個以經驗法則得出的參數，但此參數或許是此演算法最重要的參數

考慮一致性與簡化和參數的減少，修改如下：
* Searcher 輪流在「以自身為中心搜尋」與「以隨機比自身好的點為中心搜尋」間切換，均要求新解比自身好才取代
* 只要發生任何取代，下一次必定重置回「以自身為中心搜尋」

### 相似公式與概念的合併
* $x'(d)=x(d)+rand(-1,1)\cdot(x_{rand}(d)-x(d))$
* $x'(d)=x_{randbetter}(d)+rand(-1,1)\cdot(x(d)-x_{randbetter}(d))$

可以看出修改後「折射」的公式與修改後「傳播」的公式十分相似，都是以某一 searcher 為中心，以與另一 searcher 之距離作為搜尋半徑，進行落點為均勻分布的搜尋，兩式可以合併如下：

* $x'(d)=x_{center}(d)+rand(-1,1)\cdot(x_{partner}(d)-x_{center}(d))$

其中當「以自身為中心搜尋」時：
* $x_{center}=x$，$x_{partner}=x_{rand}$

當「以隨機比自身好的點為中心搜尋」時：
* $x_{center}=x_{randbetter}$，$x_{partner}=x$

![](https://i.imgur.com/0b6yLek.png)

### population redection 部分
根據實驗觀察，本演算法因為將「浪高」機制的參數拿掉，導致在多 local optimum 的 function 中過早收斂，不適合 population reduction，因次放棄原有的 population redection 機制

### 修改後演算法特色
* 極度簡單，只有一種搜尋方式及其變化，和一種簡單的切換機制
* 零參數，達成完全的 self adaptive

## 實驗結果
本次以報告要求中的十個測試函式進行實驗，並與 PSO 與 DE 比對，實驗的條件設置如下：
* PSO：$inertia=0.5,~local~best=2.0,~global~best=2.0$
* DE：$mutation~rate=0.5$
* 函式的維度均為 30 維
* 結果取 30 次執行之算數平均
* 每次執行做 300000 次 evaluation
* 各演算法以 {10, 30, 100, 300} 的 population size 實驗，取最佳組別與其他演算法比較
* 最佳解在零點的函式，每個維度做 bounds 20~40% 的平移

### Ackley
![](https://i.imgur.com/zVFbMi9.png)
在 Ackley 上收斂速度勝過 PSO 與 DE，最終收斂的數字則差不多

### Griewank
![](https://i.imgur.com/FIfl9rR.png)
在 Griewank 上與 PSO 一同卡在區域最佳解，平均較 PSO 為優

### Rastrigin
![](https://i.imgur.com/77qpfqz.png)
在 Rastrigin 上收斂速度不佳，但最後依然在收斂且比 PSO 快

### Schwefel
![](https://i.imgur.com/HXPPlrS.png)
在 Schwefel 上很快掉入區域最佳解，推測 PSO 沒有掉入是因為這是帶著趨勢的 function，momentum 類演算法會有較好的表現

### Sphere
![](https://i.imgur.com/4WWfDtA.png)
在平滑的 Sphere 上收斂速度勝過 PSO 與 DE，尾端的直線是因為採用算術平均時只要有一次不是 0 就會大幅影響收斂圖，整體效果很好

### SumSquares
![](https://i.imgur.com/AbuXSzd.png)
在平滑的 SumSquares 上收斂速度勝過 PSO 與 DE，尾端的直線是因為採用算術平均時只要有一次不是 0 就會大幅影響收斂圖，整體效果很好

### Zakharov
![](https://i.imgur.com/BIZwEyK.png)
在平滑的 Zakharov 上收斂速度勝過 PSO 與 DE，尾端的直線是因為採用算術平均時只要有一次不是 0 就會大幅影響收斂圖，整體效果很好

### Rosenbrock
![](https://i.imgur.com/C6ECW07.png)
在 Rosenbrock 上收斂速度穩定，勝過 DE，PSO 在跑第一次 30 runs 時是贏的，這次是輸的，可能效果與 PSO 差不多或略輸。

### Michalewicz
![](https://i.imgur.com/9WLTdFq.png)
在鞍點眾多的 Michalewicz 上效果不佳

### Powell
![](https://i.imgur.com/ni9cFef.png)
在 Powell 上收斂速度勝過 PSO 與 DE，但除了 PSO 以外其餘兩個直到最後都還在收斂

### 實驗分析
本演算法在平滑的函式上效果普遍不錯，在有淺 local optimum 的 Ackley 上也有超常的表現，但一旦遇到深度足夠且眾多 local optimum 的函式即會表現不佳。PSO 有時可以靠著 momentum 機制對趨勢的紀錄突破，DE 則是可以透過內部不明的資訊交換突破。

## 結論與未來展望
本演算法在進行修改之後與原先的樣貌已經截然不同，在無參數與簡單的特點上有優勢，但在對較深的 local optimum 的抵抗性上有所不足，其可能可以改進的方向有以下幾點：
* 搜尋落點的分布調整：
  本次修改中將搜尋落點的分布統一為均勻分布，如果設為常態分佈或許會有改進
* 「浪高」參數的回歸：
  將捨棄的「浪高」參數取回，改變成經過 h 次「以自身為中心搜尋」後切換至「以隨機比自身好的點為中心搜尋」，或許可以增加對區域最佳解的抵抗能力
* 搜尋中心與搜尋範圍的選擇方式：
  目前的設定使用「以隨機比自身好的點為中心搜尋」，將隨機方式做出調整，或將決定搜尋範圍的 searcher 調整至離自身較接近的點，或許會有變化
* 加入 DE 機制取代隨機：
  將搜尋的落點從機率分布改為從其他 searcher 獲取資訊或許可以獲得 DE 的能力
* 加入 PSO 中動量的機制：
  加入類似動量的機制或許可以在 Schwefel 等在整體解空間上有梯度趨勢的函式上獲得好的結果
