論文選讀 Building optimal regression tree by ant colony system ...

前文

課程 計算型智慧 報告,這是一門碩班課程,因此聽了許多學長的報告,雖然有難有易,牽扯的領域相當繁雜且艱深,例如影像分析、電機、醫學領域 … 等,很多都是有聽沒有懂,但是多少能明白一些些道理,即使後來挑選幾個進行實作,發現自己根本沒有理解,或者只是單純實作能力不足。

其中最常見到的報告內容是 B*-tree with floor plan,對於電子電路的配置擺放,要求最小化面積的操作。當然其中也有幾個跟我報告的預測性有關。對於影響分析就不多述了,其中也有幾個電費電流調控也挺有意思的,總之報告內容相當多元。

報告的時候,教授就在台下緊盯,而我剛好是在教授開會的時候報告,這學期僅我一個在教授不在的情況下報告。

  • One Exam: 30%
    只有一次期中考,而且還是人腦仿電腦考試,但是題目沒有講清楚,考炸了不少,題目理解上把常數搞錯意思,但是這不影響廣義型算法,希望助教給點分!例如:在基因算法中交配的兩兩交配,難道就不能與自己交配嗎?而在粒子算法中,只給兩個參數,難道就不能只模仿全局最佳點和自己嗎?如果只有兩個參數,而且加總為一,您叫我如何模仿鄰居和自己,看來只能二選一。
  • Homework: 40% (3 programs)
  • Presentation: 30%
    教授不在的情況下仍可以報告,所以成績是由助教評定嗎?
  • Questions: 3
    本課程一定要問三個問題,否則視如無效修課,但是問題我總是在課堂中發問,對於學長報告的內容有點作噁不明白。

論文挑選為「Building optimal regression tree by ant colony system – genetic algorithm Application to modeling of melting points」這是一篇化學期刊上的運用,不是在計算機領域的論文。

開始

從一個最簡單的應用開始

在二十個問題內,能猜出心中想的目標角色。這一類的遊戲相當多,在很多遊戲或者是心理測驗中都會用到,用來預測你大概會是哪一種類型的人、或者正在想什麼。
http://en.akinator.com/

決策樹

決策樹的分類

  • Classification Tree:分類樹
    分類,輸出 “類型”
  • Regression Tree:回歸樹
    關係程度,輸出 “數值”
  • CART (Classification And Regression Tree) 即上述兩個的總稱

關於 CART

  • 大量數據可以快速算出結果
  • 易於理解 和 解釋
  • 可以用統計數據驗證模型
  • 最優 CART 是 NP 問題。
  • 能力有限,只能對有限數據屬性操作
  • 機器學習 Machine Learning 領域常用

論文實驗資料

  • 4173 種化合物,分類屬性有 202 種描述方式。在 4173 種化合物中,3000 種用來訓練,1173 種用來驗證。
  • 與另外一組經由 277 種藥物進行熔點預測的 CART 相比。(另外一篇論文做的結果)
  • 目標預測更加準確。

CART–ACS–GA 理論

  • 將 ACS – GA 算法,套用在 CART 的建造上。
  • 先說說 ACS – GA 算法運作

ACS-GA

ACS–GA 算法 (蟻群遺傳混合算法),基於 ACS 的缺點 – 收斂慢,加入 GA 算法來加快。

  • 為什麼不單純使用 GA 算法就好?
  • 對問題編碼的困難 (轉 DNA 的問題),突變效果可能不好

螞蟻基因也有好壞問題

  • 如何反應基因好壞
  • 對費洛蒙決策的方式
  • 對費洛蒙的敏感度 … 等

換句話說,將螞蟻的能力也各自數據化,對於產生較好解的螞蟻,繁殖、交配、突變,接著談論如何運用在 CART!

CART 建造

假解亂做前,如何隨機?CART 是一棵二分樹
How we do ?

  • 基於深度優先的方式,直到某個葉節點的分類種數 < 30 或深度大於某個值,就退回。
  • 每一層必須決定 “依據哪個屬性分類” Age ? Gender ? Last R ?
  • 分類時,又要按照什麼 數值 進行分割。< 30 ? > 30 ? = 30 ?

假設 CART 有 m 個節點,n 個分類描述。在此篇中,化合物有 202 種描述,即 n = 202。

  • 為了表示螞蟻的判斷能力,到達某個節點 i 時,採用下一個分類方式 k 的費洛蒙 M[i][k]
    i < m, k < n
  • 這樣可以決定分類方式。對於某個節點 i,i 可以是目前累計完成的節點個數,或者是其他。

上面決定了分類方式,但沒決定分割點 ( cut point ) 的選擇方式。

  • 假設用 10 種決策方式,來對應分類到節點內有的所有項目屬性,進行統計分類。
    • 決策方式 1:平均、眾數、權重、 ID3、C4.5 (熵理論和訊息增益) … 等分割策略
    • 決策方式 2 : 用 10 個常數對於屬性最大最小值 f(min, max) = x0 * min + x1 * max + x2 * min * max
    • 決策方式 3:最大最小值之間切 10 等分。
  • 費洛蒙將會有 10 × n × m,即 M[10][n][m]。

關於適應函數

對於葉節點

Partial least squares method 不同於 “最小平方法”

  • 多因變數 對 多自變數 的回歸建模方法
  • 對於每一個葉節點的所有資料分別做偏最小二乘法,會得到分類的相聯性,也就是 相關係數 (correlation coefficient)
  • 相關係數總和大小 與 適應力高低 成正比,用 驗證集 找到相關係數。

結論

  • 對於下次迭代,偏向於好的切割屬性
  • 對於切割屬性,可以得到好的分割點
  • 排除單一分割策略的形式
Read More +

計算型智慧 程式作業

Computational Intelligence 計算型智慧

本課程將會有三階段程式,將三個算法依序加入程式中,為了要實作這些算法,必須先作出模擬器。

Lv. 0 模擬器

在一個 2D 平面中,以一個圓形當作車子,道路為線段的方式進行描述。為了在隨後的擴充,將地圖內容物分成可行區域多邊形和障礙物多邊形。

  • 要支持車子下一秒的擺角,並且按下推動鍵會根據方程式進行移動。
  • 可以將車子兩側的感測器進行角度調整,並且可以根據感測器角度進行距離計算。
  • 並且在呈現 2D 平面時,附加顯示座標軸的比例。

完成圖

由於私心,有一些額外產物。

  • 完成可以自動置中的設定
  • 提供地圖縮放和讀取操作
  • 製作地圖產生器 (other project)
  • 模擬器的彈木遊戲番外篇 (other project)
  • 提供運行欄位的縮起

Lv. 1 模糊系統

車子運行公式

運行公式

其中 Φ(t) 是模型車與水平軸的角度,b 是模型車的長度,x 與 y 是模型車的座標位置, Θ(t) 是模型車方向盤所打的角度,我們對模擬的輸入輸出變數限制如下:

-40 deg <= Θ(t) <= 40 deg

寫一個程式使用模糊系統、理論模擬車子行徑,並且想辦法最佳化。

  • 考慮擴充性,以後車子的運行公式可能會替換,因此建造一個 Engine class
  • 模糊系統的幾個特性拆分成數個 method,並且使用不同的數學計算採用繼承關係。
  • 最困難得地方在於計算函數交集,採用離散取點是最後的手段

函數實驗

  1. 經過實驗,三個感測器分別坐落於前方 (90度)、左右各偏轉 50 度左右的夾角比左右 90 度更好。用以應付多變的轉角彎度,防止模稜兩可的擺動。
  2. 不管哪裡種去模糊化系統,由於題目限制擺角於 [-40, 40] 度之間,因此很容易在加權平均、質心、離散化而導致邊界擺角的機率甚低,當越多函數則稀釋程度越高。因此函數定義可以超過限制擺角,只需要在去模糊化時,約束至條件內即可。
  3. 設計函數時,要討論向其中一個方向偏轉,也就是不能設計過於對稱的圖形,否則將會在死胡同裡打轉。

函數設計

d1 為前方感測器,d2 為右方感測器,d3 為左方感測器。

  1. d1 歸屬函數為
    d1 歸屬函數
    d2, d3 歸屬函數為
    d2, d3 歸屬函數
  2. 函數式加權平均
    If d3 large, θ = 55
    If d2 large, θ = -55
    If d2 medium, θ = -40
    If d3 medium, θ = 40
    If d1 large and d2 small, θ = -30
    If d1 large and d3 small, θ = 30
    If d1 small, θ = -60
    
    規則如上述七條,以最簡單的常數關係。測試結果還算不錯。
    if condition, then statement,statement 中的變數不存在於 condition 去做調整,後來發現由於太複雜去討論而一直失敗。
  3. 重心法、最大平均法、修正型最大平均法、中心平均法
    為了方便計算連續函數,採用離散取點,間隔 0.1 抓取 [-60, 60] 之間的點座標。對於以下四種方法討論於簡單彎道的過程記錄:
    If d3 large
    If d3 large
    If d2 large
    If d2 large
    If d2 medium
    If d2 medium
    If d3 medium
    If d3 medium
    If d1 large and d2 small
    If d1 large and d2 small
    If d1 large and d3 small
    If d1 large and d3 small
    If d1 small, θ = -60
    If d1 small

    • 重心法
      當中表現最為穩健,而且路徑平滑。
    • 最大平均法
      由於定義的函數較為簡單,而且大多都是以梯形的方式存在,雖然能在機率高的情況下走完全程,路徑中會呈現左右擺盪情況。並且大多都已極值的方式出現。
    • 修正型最大平均法
      情況會稍微好一些,但是對於並沒有向重心法一樣的圓滑曲線,仍是因為原先的函數設計所惹的問題。

    對於某一種方法而去定義相關的函數進行測較好,而在最大平均法的部分,必須使用較具有變化性的曲線,否則很容易在極值狀況下擺動。


Lv 2. GA

RBF

「放射狀基底函數網路 RBF」,基本上,其網路架構如圖1所示,為兩層的網路;假設輸入維度是p ,以及隱藏層類神經元的數目是J ,那麼網路的輸入可以表示成:

其中選用高斯型基底函數:

其中 x = (x1,x2,…,xp) 、mj = (mj1,mj2,…,mjp) 、|| || 代表向量絕對值
適應函數為:

請用實數型基因演算法,找出wj , mj , σj,在不同的數字J下,最好的基因向量 (例如J為9、輸入x為3維向量,則表示基因向量是1+9+3x9+9=46維度的向量,請注意這裡不是指族群數;又例如J為7、輸入x為3維向量,則表示基因向量是1+7+3x7+7=36維度的向量)下,評估函數E(式1)為越小越好。其中基因向量維度公式為 1+J + pJ+J = (p+2)J+1維向量( ,w1 , w2 ,.., wJ , m11, m12,.., m1p, m21, m22,.., m2p,.., mJ1, mJ2,…, mJp, σ1, σ2, …, σJ)。

參數說明 :

  • N 作業1產生的N筆成功到達目的訓練資料(換不同起始點)
  • yn 表示訓練資料的方向盤期望輸出值 P.s.如果配合wj值的範圍為0~1之間,在此則必須把yn由-40~+40度正規化到 0~1之間;如果不想正規化 就必須把 wj的值範圍調整到 -40~40之間 範圍為0~1之間
  • Wj 範圍為 0~1 (或是-40~40)之間 P.s.此需配合訓練集的yn跟F(n)值範圍,所以皆需正規化到0~1之間;若不正規化,wj的值範圍為 -40~40之間
  • mj 範圍跟X範圍一樣,如以提供的範例檔則為 0~30
  • σj 範圍為0~10之間;也可以設定更大的範圍做探討。

實作概要
把參數編碼成 DNA,使用 GA 算法改變 DNA,然後用之前的模糊系統的結果,讓 RBF 接近之前定義的模糊系統。需要拿模糊系統的一些測資當作訓練資料,收集之後餵給 GA 做訓練。

實驗方法

  1. 核心代碼,對於每次迭代,著手適應、選擇、交配、突變。
  2. 細部 “交配” 代碼,採用實數型的分離和聚集兩種情況。
  3. 細部 “突變” 代碼,採用微量雜訊,唯一不同的地方在於,這個微量雜訊會根據當前數值的比例有關,為了避免大數字對於微量雜訊的干擾不夠強烈。

實驗結果

  1. 運行結果 J = 3, p = 3
    ( ,w1 , w2 ,.., wJ , m11, m12,.., m1p, m21, m22,.., m2p,.., mJ1, mJ2,…, mJp, σ1, σ2, …, σJ) = (0.163568 0.851471 1.594151 1.379580 13.092824 0.000505 12.611789 30.000000 0.000368 18.715240 0.000850 2.708967 30.000000 6.307677 7.584529 10.000000)
  2. 訓練數據為 “map2” 走一圈的訓練資訊,約為 500 筆。因為 “map0” (即本次作業給的地圖) 的複雜度不夠以至於無法充分表達原本設計的模糊系統。也就是根據當初模糊系統設計,收集的數據的多樣性和連續性不足。

實驗分析

根據 RBF 的神經元,這裡可以越少越好,在程式中,神經元個數(J) 設置 3 個。運行時採用輪盤式選擇,讓適應能力好的,具有較高的機會繁殖,採用一個隨機變數去挑選。而在基因方面使用實數型基因的形式。

  1. 運行時,突變機率和突變比例相當重要,由於相同適應能力好的物種量很多,只保留其中一部分即可,因此可以將突變機率0.5 左右,太低則會造成進化速度太慢,太高則容易失去原本適應好的物種,導致整體適應度的震盪。
  2. 另外設置突變的比例,也就是該段實數值上下調整的比例。
    g.getDNA()[i] = g.getDNA()[i] + ratio * Math.random() * g.getDNA()[i];
    藉由上述的式子,將 ratio 設置成一個調變比例,來製造爆炸效應的規模。而在運行時,突變效果還能接受。
  3. 原本運行時,只將 DNA 片段的值任意放置,並且約束在不會超出函數的定義域,在收斂速度上有明顯加速。但為了符合作業需求,將每個參數約束在指定範圍內,在收斂速度慢了一截,在預期結果並沒有很好。
  4. 在不同地圖收集的預期資訊,會針對不同車子感測器的角度有所差異,因此不能拿不同型的感測數據,訓練出來的 RBF 不能給另外一台車子來使用,除非使用的感測器角度相當接近。
  5. 對於死路的轉彎,在神經元個數(J) 等於 2 的時候,運行結果較為不佳,但是在本次作業中,並不會有這種數據的出現,也不用考慮這種情況。但是當神經元個數少時,GA 算法的運行速度是相當快的。

Lv. 3 PSO

請利用Particle swarm optimization替換掉 GA 部分。

  • AgentNum(粒子數)
  • IterationNum(疊代數),
  • MaxV(最大速度),
  • MaxX(最大值範圍),
  • Weights(兩個權重),
  • Convergent_Error(停止條件)
  • 並畫出 fitness function 曲線變化 (每一次疊代的最佳fitness值),最後訓練完成的F(x)當作規則 請跑出車子軌跡。

實驗分析

一開始參數為

1
2
3
4
5
6
public int sandSize = 512;
public double maxVelocity = 0.5;
public double maxXposition = 0.5;
public double weightOfCognition = 0.5;
public double weightOfSocial = 0.5;
public double nearRatio = 0.5;

PSO 1

PSO 2

  • 基本上 maxXposition 沒有用到,調整其他比例可以發現端倪。

  • 從圖 PSO 2 中可以發現到,PSO 與 GA 最大的不同在於,如果 GA 調用部分突變的情況下,很高的機率會發現適應曲線是嚴格遞減的,但是在 PSO 由於會飛來飛去,有可能會來回震盪。

  • 當所有粒子逼近最佳解時,仍會以原本的速度繼續飛行,而原本屬於最佳位置的點也會開始模仿其他粒子飛行,如此一來就會造成震盪。

PSO 3

  • 其震盪的高低決定於鄰近模仿的權重,如果鄰近的粒子效果不好,模仿的權重高的時候,會導致整個最佳解有嚴重的偏離。由 PSO 3 中可以驗證這個震盪問題。

  • 如果對於全局模仿權重調高,很容易造成處於群聚粒子不容易分離,也就是很難在早到其他的區域最佳解,會在很快的時間內進入某一個區域最佳解,從這一點中可以發現 PSO 真的具有快速收斂的性質。

  • 設定 maxVelocity 是將整個向量長度 (歐幾里得距離) 壓縮,這將可以控制查找的精密度,如果設定太小會導致收斂速度明顯下降。將 maxVelocity = 10 時,適應函數看起來會有比較高的進展,由於會將每個參數約束,只要速度不是太小影響就不大。

  • 當速度上限增加時,粒子碰到牆的機會也會上升,由於搜索範圍的可能性涵蓋邊界的情況增加,如果最佳解在邊界,在這樣的情況就會更好。

  • 在代碼中,鄰近的定義為最近粒子中排名前 20% 的最佳解。如果採用對於常數長度,這種情況上不容易觀察,也就是說不能直接找到鄰近模仿的規模該定義在何處。

  • 運行結果 J = 3, p = 3
    ( ,w1 , w2 ,.., wJ , m11, m12,.., m1p, m21, m22,.., m2p,.., mJ1, mJ2,…, mJp, σ1, σ2, …, σJ) = (0.117271 1.270048 0.000000 0.805823 15.845525 0.000000 21.613452 13.509075 0.000000 0.000000 30.000000 0.000000 10.505934 10.000000 10.000000 5.238101)

Github Download

Download

Blog

Read More +

計算型智慧 - 學習 (Computational Intelligence)

計算型智慧

文章簡介

  • 下學期修了這門課,這其中會與另一門類神經網路有關。
  • 中間穿插工數和微積分的一些數學名詞。
  • 接著,您將會看到一系列筆者對計算型智慧的認知。
  • 看到以下內容,雖有數學模型、演算法成份,但主體為模擬自然界的各種思維。

算法設計

特定型最佳化法則

根據函數的特性,衍伸出來的搜尋方式,目標函數有特別性質,例如:線性、微分 … 等。微分法、梯度法都是屬於此類。再講白一點,一般大學時學的演算法都是如此,通常是具有最佳化結構的情況,因此會有最短路徑算法、二分搜尋、三分搜尋 … 等。

廣義型最佳化法則

不管目標函數的特性為何,無須修改設計法則,亂做一通、隨機搜索、以及接下來講的主題都屬此類。

模糊系統

模型簡介

  • 一般程式撰寫判斷條件相當精準,同時也不好做修正,畢竟一般人看不懂那麼多 if-else 語句。
  • 那有沒有更好一點的描述方式?這就是接下來要講的。
  • 如果硬要說明,模糊系統相當於一個精準輸入→亂來一通→精準輸出,也就是多了中間那個過程。

模型介紹

  • 是或不是,僅有 0/1 描述。
    真實世界是按照是的相似度有多高,不是的話就是有多高。或者描述多是有多多,少是有多少。

  • 歸屬函數 (membership function)
    值介於 [0, 1] 同時也是相似度的描述。
    詳細請參照 wiki 模糊集

  • 模糊關係 (fuzzy relation)
    簡單的說,一般用稀疏矩陣是用 N * N 的陣列,並且裡面存放 0/1 數值,但是在模糊關係中,將會使用 [0, 1] 之間的實數來代替。
    詳細請參照 wiki 模糊關係

    • 有什麼樣的操作 ?
      對於關係運算,也有關係合成或者是條件機率。對於關係合成就可以自訂函數來合成,而條件機率通常會使用積分去查閱,但是模糊關係至少三維空間 (因為多一個歸屬函數值),所以必須走投影擴充的方式,當然可能有其他的做法。
  • 單一規則,單一變數
    if x = p, then y = q.
    模糊起來

    x = p 的關聯性多少,y = q 的多少比率。
    

    舉個例子來說

    x 相當靠近 p, 假使說相似度 50%, 則 y = 0.5 * q
    

    以上是函數是說法,當然您可以自由選擇越接近反而越低,或者是客製化。

  • 單一規則,多變數
    if x1 = p1 and x2 = p2, then y = q

    • 由上一條,會有一點想法,那把兩個相似度取最小值如何?或者是相乘(假使相似度小於 1)。
    • 模糊沒有標準答案,覺得合理就行。
  • 單一規則,多變數
    if x1 = p1 or x2 = p2, then y = q

    • 由上一條,會有一點想法,那把兩個相似度取最大值如何?或者是相加後約束小於 1。
    • 模糊沒有標準答案,覺得合理就行。
  • 多規則,單一變數
    if x1 = p1, then y1 = q1
    if x2 = p2, then y1 = q2

    • 再藉由上一條相乘,那接著相加如何?還是要來個加權平均?
    • 一樣沒有標準答案,加權就是拿相似度出來當權重。
  • 多規則,多變數
    想必已經自動推論出來,在此就不多說。

  • 怎麼來亂?(隨便說說)

    • 函數式:多少相似度 p 根據多項式 f(p) 產出 y 值。
    • 語意式:畫出 f(y) = p 的圖,計算 p 所占有面積的面積(劃一條線取交集),來決定 y 要取多少。
    • 中間要不要遵守遞移律、交換律、結合律?照理來講是要的。
      不過想吐槽的是,都這麼模糊了,還要遵守這三律嗎?
      
  • 建造模糊規則

    • 通常由有經驗的專家口頭描述,然後讓程式慢慢演化。
    • 如果沒有專家可問,先把參數空間做切割,分別定義產出。
      最簡單的大小分,如果有 n 個參數,將會產出 2^n 個空間,定義起來就很累。
      
  • 模糊化類神經網路 … 略

結語

  • 運算方式,跟編程複雜度有關。
  • 函數式最好寫,但是彈性不高,產出結果通常有限(多樣性)。
  • 如果採用非連續性的就很痛苦,通常會使用離散化取數值分析,可用重心法。
  • 有重心法、肯定有眾數、中數法。
  • 一般來說函數式就夠用,世界萬物都是簡單構成複雜。
  • 可以利用收集資料,讓類神經網路產生演化結果 (稍後會提到),神經應該也是模糊的!
  • 收集到的資料正確性不知道有多高,根據簡單的投影法則,也可以變成模糊系統(初版)。

模擬退火

簡介

「模擬退火來自冶金學的專有名詞退火。退火是將材料加熱後再經特定速率冷卻,目的是增大晶粒的體積,並且減少晶格中的缺陷。」取自 wiki

簡單的說,膨脹去雜質,冷卻來精煉。冷卻得到區域最佳解,膨脹增加得到全局最佳解的機率。

操作

  • 以 f(x, y) = z 的函數,要找到全局最小值,圖形看起來就是 3D 模型。
    水往低處流,人往低處走
    
  • 當現在在 (x, y) 時,笨的方式就是往四處看看,看哪邊更小就往哪裡走出下一步。而高明的作法則是根據梯度(微分來了)低的地方走,您就講想您有一個重力感測器。
  • 步伐將會越來越小,這樣才能步步靠近區域最佳解。
  • 當相當靠近區域最佳解時,變小幅度(dx/dt)太小,那就跳到更遠的地方去吧,相當於容忍較差的環境。
  • 什麼時候容忍?可以根據某些指數函數結果跟隨機亂數比大小。

結語

  • 寫 ACM 題目時,通常會選擇隨機撒點,然後對於每一個點根據相同步伐走相同步數,逐一縮小步伐。因為跳出的容忍不好設計。
    foreach 隨機點
        for stepSize big to small
            for i = 0 to stepCount
                四處看看找更好的,Update 當前隨機點。
    
  • 簡單運用,找出多邊形費馬點、最小覆蓋圓 … 等。
  • 與隨機搜索差別在哪?隨機搜索相當於對每個子空間猜測,分布密度高才會準,空間越大,連區域最佳解都得不到。
  • 講到區域最佳解-看看咱們的政治人物,不外乎都是講那些事情,這樣就是區域最佳解。思維跳脫機率不夠高,看來是火不夠大。

基因算法

簡介

又稱 GA 算法,模擬生物遺傳的過程,根據「物競天擇,適者生存」的演化論,最後會得到最好的解答。而進行演化就是染色體的事情了,當一開始的多樣性夠,再搭配突變情況交織出來,那崇高的自然藝術便會出現。

看看人類,您覺得有適者生存嗎?那這樣會進化嗎?
有空去搜尋電影-《蠢蛋進化論》看看不願面對的真相?

操作

  • 將資料表示成基因片段,最簡單為二進編碼,當然也可以用實數。
    資料是什麼?函數的常數參數,來驅使我們的模型可以更接近收集出來的數據。
  • 第一步-初始化物種
    隨機產生基因片段,或者來個生物大滅絕保留可能好的再隨機生成。
  • 第二步-適應環境
    越接近收集出來的數據(差值總和越小),適應力越高。這就相當於成長階段。
  • 第三步-擇偶
    通常適應度高的會配在一起,就如人類有反例,這沒有絕對。
  • 第四步-交配
    交配方式如同染色體行減數分裂後的運作,將某幾段進行交換,而生物染色體只會切一刀然後配對,因為當初的雙股螺旋 … 各種原因,反正就是生物物質關係。如果是實數,則可以想像成會生成拉近關係或者是拉遠關係的結果。

    兩個好的物種交配,也不見得子代會好。

  • 第五步-突變
    個體突變,染色體的 01 互換機率,或者在實數方面特化或者是弱化(就是乘實數)。

設定集

  • 基因種類

    • 一般型基因原則
      DNA[i] 只會有 0 或 1
    • 實數型基因原則
      DNA[i] 可以是任意實數
    • 為什麼這麼分類?IEEE floating-point format 感覺不是好的方法?請自行思考,其中最大的原因是不應該侷限基因。
  • 一般型交配手法

    • 單點交配
      對兩段基因,隨機找索引 i,交換索引 i 之後的所有基因。
      i = rand_generate();
      for j = i to length
          swap(dna1[j], dna2[j])
      
    • 兩點交配
      與單點交配類似,不過是找一個區間 [l, r] 進行交換
      for i = l to r
          swap(dna1[j], dna2[j])
      
    • 字罩交配
      隨機挑數個隨機位置做交換。
    • 更多,您可以妄想。
  • 實數型交配手法

    DNA1[i]' = DNA1[i] + k * (DNA1[i] - DNA2[i])
    DNA2[i]' = DNA2[i] - k * (DNA1[i] - DNA2[i])
    k 取 [-1, 1] 的微量亂數。
    
  • 繁殖
    因為繁殖池大小有限,物種數量將會被約束。

    • 輪盤式選擇
      根據適應函數反應分布群族大小,四捨五入填滿整個繁殖池。
    • 競爭式選擇
      每次隨機挑選兩個,對於這兩個挑一個好的留下,直到繁殖池滿。
  • 更多設定

    • 基因長度:
      反應精準度、編碼方式。
    • 交配機率:
      機率高,容易產生混種!看看混血兒多聰明且吸引人,通常子代就不是如此。
    • 突變機率:
      機率太高反而是隨機搜索,調適好相當於爆炸式搜索。
    • 適應函數:
      如何反應好的物種?

結語

  • 應用-使用類神經網路的模型,利用基因算法找到最佳解。而每個神經元都有搭配的參數,就是把參數基因化,調用基因算法。
    幾句話說明類神經網路

    每個神經元根據所受到的刺激產出一個定值,而神經元也有階層關係,每一個階層間會互相刺激,最外層吸收外界資訊,慢慢細化傳入最後階段的神經元來反應。而 ‘刺激到產出’ 可以猜想為加權平均。

  • 實作後,這種算法必須應用在接近連續層面上會比較好,離散函數的問題效果不彰,也就是會有一些額外的判斷條件。
  • 擇偶相當困擾,通常根據隨機亂數,在排序後做選擇。
  • 交配相當刺激,同時也是最難抉擇的地方,個人造化。
  • 要不要適應繁殖?都行,適應好的物種就多複製幾個!// 看您要不要固定,不然數量會爆炸,或者加入篩選。
  • 大量繁殖大量突變,造就爆炸效應!(在鄰近空間進行爆炸找更好的地方)
  • 最後根本就是在玩突變,突變算法就此誕生!

螞蟻算法

簡介

螞蟻單一功能低,群體完成最佳化。螞蟻行動過程中會留下費洛蒙,隨著時間費洛蒙也會下降,在這反反覆覆的過程中,蟻群很有機會開創出全局最佳解。

螞蟻雖小,亦能驅象。

操作

  • 鮮少有人根據時間做迭代模擬的基底。
  • 由於模擬上相當困難,所以來點不科學的寫法,但仍要抓住費洛蒙的核心。
  • 第一版本-對於最短路徑搜索
    • 決定有多少隻螞蟻
    • 所有路徑上的費洛蒙初始為 0。
    • 決定要跑多少次迭代
    • 每次迭代,依序放出螞蟻,螞蟻會根據路徑上費洛蒙隨機走(也並不是越高越好),對於走比較好的路徑,將其走過路徑上的費洛蒙濃度增加。
    • 每次迭代,消散一點費洛蒙,來減少重複的錯誤區域解。
      這樣有什麼缺點?因為是依序放出螞蟻,所以相當不自然。
      再者每隻螞蟻還要有能力記錄走過的路徑。
      螞蟻的記憶能力有多高?
      
  • 虛擬碼

    Initialize
        Loop /* at this level each loop is called an iteration */
            Each ant is positioned on a starting node
            Loop /* at this level each loop is called a step */
                Each ant applies a state transition rule to     incrementally build a solution and a local pheromone     updating rule
            Until all ants have built a complete solution
            A global pheromone updating rule is applied
        Until End_condition
    
  • 第二版本-收集食物

    • 決定有多少隻螞蟻,並且隨機撒下。
    • 每隻螞蟻會搜索鄰近的食物
    • 根據概率撿起某個食物,朝向費洛蒙高的地方搬運。
    • 再根據概率將食物放下,放下時增加該地費洛蒙。

設定集

  • 費洛蒙的濃度消散函數
  • 螞蟻根據費洛蒙濃度的選擇函數
    • 不遵守?機率為何?
    • 遵守?又是根據什麼條件機率。

結語

  • 應用方面
    • 分群,把文章分類。
    • 搜索,各種 NPC 問題都可以拿來玩玩。
  • 小遊戲
    感覺攻城遊戲對於這方面相當有意思,不過此遊戲有炒地皮的設定,基礎建設越來越貴,各種不科學的情況,七八千分還算正常人吧,沒有搭載最佳化系統的素人。
  • 另外可見 DJWS的說明

粒子算法

簡介

英文名稱 Particle Swarm Optimization,粒子群聚演算法。看過鳥群群舞嗎?魚群穿梭嗎?

鳥群
圖片來源地址

在相互模仿效應中,牠們會向鄰近學習,部分保留、部分學習,這也是向其好的一面靠攏。

借由互相學習來調整群體面向,最後演化應該是會非常接近的群體。以人類來說,演化時間還不夠久 看起來個體智慧與能力的分歧度還相當大。根據演化結果,由於互動機率因歧異性而下降,導致演化不會趨近于一。

粒子演算法三項重點:評估,比較,模仿

  • 評估 - 目標函數值
  • 比較 - 根據評估結果比較,根據機率還是特定條件符合後
  • 模仿 - 將部分屬性(參數)模仿過來

操作

  • 一開始把族群撒在特定區域,並且賦予牠一個初速度。
  • 接著將會根據這個速度飛行。
  • 但是同時會根據鄰近或區域最佳進行模仿,速度矢量會有兩條(原本和模仿),兩個矢量根據參數調整後相加。
  • 慢慢地朝著某個方向飛行,帶頭的也會往其他的地方飛行。

結語

  • 單純模仿也行,只是要明白模仿對象是鄰居還是全局最佳。
  • 單純模仿的壞處在於搜索中的過程路徑會相當短,但是迭代次數應該會比較少次。
  • 如果是向鄰近模仿,可能是按照歐幾里德距離找最近幾個資料點。說不定會運用到 K-d Tree 這個資料結構。

反思題目

  1. (25%) 請說明模糊系統的構成要件為何 ? 其功能分別是 ? 如何建立模糊系統 ?
    其優缺點分別是 ?
    大體要件:模糊化機構、模糊推論引擎、模糊規則庫、去模糊化系統。

    模糊化機構:輸入有可信度問題,加以模糊。
    模糊推論引擎:將數個模糊規則合併篩選用途。
    模糊規則庫:每條規則將根據輸入產出相對應模糊輸出。
    去模糊化系統:將模糊產出的圖,進行調整最後以向量形式輸出。

    細節要件:模糊集合、模糊運算、模糊關係。

    模糊集合:用來表示一個函數對於某個條件的歸屬程度。
    模糊運算:表示每一個模糊集合之間的合成方法,用以做更複雜的組合。
    模糊規則:明確判斷條件 if else 轉換成模糊的判斷條件,即為模糊規則。
    模糊關係:在龐大的關係中,輔助綜合條件判斷的模型。

    建造模糊系統:通常由專家提供的語意規則建造,否則將會使用均勻切割的方式去建造模糊系統。
    優點:語意式的描述給予程式判斷上更大的彈性,不用撰寫非常明確的判斷條件於程式中,也能讓結果相當符合一般人的需求,而且後期可調整參數。
    缺點:可能沒有專家協助,模糊定義上很難得到好的結果。相較於明確判斷,去模糊化的過程速度會慢上許多,以及模糊運算上動用到的函數複雜度與所需時間成正比。

  2. (25%) 螞蟻是如何找到最短路徑 ? 請詳述 AS-TSP algorithm。
    就是那個每次回合,依序放出螞蟻,螞蟻根據費洛蒙走判斷條件走,最佳的走法將會在下一次運行時,路徑上的費洛蒙額外增加。

  3. (20%) 請詳述 RBF network 的架構為何 ? 如何訓練 RBF network ?
    全名:Radial basis function network
    架構有三層輸入層、隱藏層、輸出層。
    要素為非線性激活函數、向量形式的輸入輸出。
    在這門課中,採用基因算法來訓練它,根據與收集資料的誤差來當作適應程度,不斷地調整至好的參數。
    而在線性可分割的高維空間中,可以利用數學函數的運算再加上一個微量調整的偏量相乘,將整個函數慢慢導向至最好結果。(曾經所說的向量疊加,新的法向量 = 所在的法向量 + 微量 * 資料表誤差表示出來的向量。)

  4. (10%) 請說明有哪兩大類最佳化工具 ? 其優缺點分別為何 ?
    • 特定型最佳化法則
      快,一個問題一個算法。同一算法能解決的問題少,幾乎都要客製化。
    • 廣義型最佳化法則
      慢,無須根據問題調整算法。
  5. (20%) 請詳述 Genetic algorithm。其優缺點分別為何 ? 如何改進其缺點 ?
    優點

    1 与问题领域无关切快速随机的搜索能力。
    2 搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较,robust。
    3 搜索使用评价函数启发,过程简单。
    4 使用概率机制进行迭代,具有随机性。
    5 具有可扩展性,容易与其他算法结合。

    缺點

    1 遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码。
    2 另外三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验。
    3 没有能够及时利用网络的反馈信息,故算法的搜索速度比较慢,要得要较精确的解需要较多的训练时间。
    4 算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进。
    5 算法的并行机制的潜在能力没有得到充分的利用,这也是当前遗传算法的一个研究热点方向。

    參考

  6. (20%) 請詳述 螞蟻算法。其優缺點分別為何 ? 如何改進其缺點 ?
    優點

    1 求解性能上,具有很强的鲁棒性(对基本蚁群算法模型稍加修改,便可以应用于其他问题)和搜索较好解的能力。
    2 蚁群算法是一种基于种群的进化算法,具有本质并行性,易于并行实现。
    3 蚁群算法很容易与多种启发式算法结合,以改善算法性能。

    缺點

    基本蚁群算法计算量大,求解所需时间较长。

    參考

  7. (20%) 請詳述 粒子算法。其優缺點分別為何 ? 如何改進其缺點 ?
    優點

    简单、易实现、计算量小和计算效率高

    缺點

    问题最主要的是它容易产生早熟收敛(尤其是在处理复杂的多峰搜索问题中)、局部寻优能力较差等。PSO 算法陷入局部最小,主要归咎于种群在搜索空间中多样性的丢失。

    改善

    (1)全局优化算法与局部优化算法混合
    (2)全局优化算法与全局优化算法混合。纵观各种与 PSO 算法相关的混合算法,大多数基本上采用一种策略对其改进,要么与其他算法,要么加入变异操作,同时采用两种策略的混合算法较少。

    參考


題外話

  • 關於單一感知機
    • 假設現在處於平面上,也就是說 f(xi, yi) = ci
      根據感知機會有三個變數,猶如 w[1] x + w[2] y + w[0]
      現在得到一堆 (xi, yi, ci) 是實際的情況,如何訓練感知機得到 w[] ?
      假設感知機會根據 (xi, yi) 產出 di
      根據調整參數 w’[i] = w[i] + wwww((yi - di))
      wwww 可以是任意函數,不過盡可能地介於 [0, 1]。
      會發現地,最後產出 di 會相當接近於 yi。
    • 當處於線性可分割,也就是可以一刀把兩個群族分開,那麼感知機是會收斂得到好的結果。
    • 也有另外一種方式,採用偏離向量的迭加,這個向量也會來自於產出的誤差效應。

Reference

  • NCU CSIE 計算型智慧課程
Read More +