《人工智能導論》 第6章 智能計算及其應用


智能計算及其應用

進化算法

進化算法的概念

進化算法(evolutionary algorithms,EA)是基於自然選擇和自然遺傳等生物進化機制的一種搜索算法。進化算法是一個“算法簇” ,包括遺傳算法(GA)遺傳規划進化規划等。進化算法的基本框架是遺傳算法所描述的框架。進化算法可廣泛應用於組合優化、機器學習、自適應控制、規划設計和人工生命等領域。

進化算法的生物學背景

適者生存:最適合自然環境的群體往往產生了更大的后代群體。生物進化的基本過程如下圖:

005
  • 染色體(chromosome):生物遺傳物質的主要載體。
  • 基因(gene):擴展生物性狀的遺傳物質的功能單元和結構單位。
  • 基因座(locus):染色體中基因的位置。
  • 等位基因(alleles):基因所取的值

進化算法的設計原則

  • 適用性原則:一個算法的適用性是指該算法所能適用的問題種類,它取決於算法所需的限制與假定。優化問題的不同,則相應的處理方式也不同。
  • 可靠性原則:一個算法的可靠性是指算法對於所設計的問題,以適當的精度求解其中大多數問題的能力。因為演化計算的結果帶有一定的隨機性和不確定性,所以,在設計算法時應盡量經過較大樣本的檢驗,以確認算法是否具有較大的可靠度。
  • 收斂性原則:指算法能否收斂到全局最優。在收斂的前提下,希望算法具有較快的收斂速度。
  • 穩定性原則:指算法對其控制參數及問題的數據的敏感度。如果算法對其控制參數或問題的數據十分敏感,則依據它們取值的不同,將可能產生不同的結果,甚至過早地收斂到某一局部最優解。所以,在設計算法時應盡量使得算法對一組固定的控制參數能在較廣泛的問題的數據范圍內解題,而且對一組給定的問題數據,算法對其控制參數的微小擾動不很敏感。
  • 生物類比原則:因為進化算法的設計思想是基於生物演化過程的,所以那些在生物界被認為是有效的方法及操作可以通過類比的方法引人到算法中,有時會帶來較好的結果。

遺傳算法

遺傳算法的基本思想

在求解問題時從多個解開始,然后通過一定的法則進行逐步迭代以產生新的解。

生物遺傳學概念 遺傳算法之應用
適者生存 目標值比較大的解被選擇的可能性大
個體(Individual)
染色體(Chromosome) 解的編碼(字符串、向量等)
基因(Gene) 解的編碼中每一分量
適應性(Fitness) 適應度函數值
群體(Population) 根據適應度值選定的一組解(解的個數 為群體的規模)
婚配(Marry) 交叉(Crossover)選擇兩個染色體進行 交叉產生一組新的染色體的過程
變異(Mutation) 編碼的某一分量發生變化的過程

遺傳算法的發展歷史

  • 1962年,Fraser提出了自然遺傳算法。
  • 1965年,Holland首次提出了人工遺傳操作的重要性。
  • 1967年,Bagley首次提出了遺傳算法這一術語。
  • 1970年,Cavicchio把遺傳算法應用於模式識別中。
  • 1971年,Hollstien在論文《計算機控制系統中人工遺傳 自適應方法》中闡述了遺傳算法用於數字反饋控制的 方法。
  • 1975年,美國J. Holland出版了《自然系統和人工系統 的適配》;DeJong完成了重要論文《遺傳自適應系統 的行為分析》。
  • 20世紀80年代以后,遺傳算法進入興盛發展時期。

編碼

由於遺傳算法不能直接處理問題空間的參數,因此必須通過編碼將要求解的問題表示成遺傳空間的染色體或者個體。對一個具體問題如何進行編碼是應用遺傳算法的首要問題,也是其難點。

  • 位串編碼:將問題空間的參數編碼為一維排列的染色體的方法被稱為一維染色體編碼方法。其中最常用的就是二進制編碼

    • 二進制編碼:用若干二進制數表示一個個體,將原問題 的解空間映射到位串空間\(B=\{0,1\}\)上,然后在位串空間上進行遺傳操作。

      • 優點:類似於生物染色體的組成,算法易於用生物遺傳理論解釋,遺傳操作如交叉、變異等易實現;算法處理的模式數最多。
      • 缺點:
        1. 相鄰整數的二進制編碼可能具有較大的Hamming距離,降低 了遺傳算子的搜索效率。
        2. 要先給出求解的精度。
        3. 求解高維優化問題的二進制編碼串長,算法的搜索效率低。
    • Gray 編碼:將二進制編碼通過一個變換進行轉換得到的編碼。設二進制串\(<\beta_1\beta_2\cdots\beta_n>\)對應Gray 串\(<\gamma_1\gamma_2\cdots\gamma_n>\),則從二進制編碼到Gray 編碼的變換為:

      \[\begin{equation} \gamma_k=\left\{ \begin{aligned} & \beta_1 & k=0 \\ & \beta_{k-1}\oplus\beta_k & k>1 \end{aligned} \right. \end{equation} \]

      式中\(\oplus\)表示模 2 加法,從一個Gray串到二進制串的變換為:

      \[\begin{equation} \beta_k=\sum^k_{i=1}\gamma_i(mod\ 2)=\left\{ \begin{aligned} & \gamma_1 & k=1 \\ & \beta_{k-1}\oplus\gamma_k & k>1 \end{aligned} \right. \end{equation} \]

      Gray 編碼克服了二進制編碼的Hamming懸崖的缺點。

  • 實數編碼:用若干使署表示一個個體,然后在實數空間上進行遺傳操作。采用實數表達法不必進行數制轉換,可直接在解的表現型上進行遺傳操作。

  • 多參數級聯編碼:把每個參數先進行二進 制編碼得到子串,再把這些子串連成一個完整的染色體。多參數級聯編碼中的每個子串對應各自的編碼參數, 所以可以有不同的串長度和參數的取值范圍。

群體設定

群體設定主要包括初始種群的產生和種群規模的確定:

  • 初始群體的產生
    • 根據問題固有知識,把握最優解所占空間在整個問題空間中的分布范圍,然后在此分布范圍內設定初始群體。
    • 隨機產生一定數目的個體,從中挑選最好的個 體加到初始群體中。這種過程不斷迭代,直到初始群體中個體數目達到了預先確定的規模。
  • 種群規模的確定
    • 群體規模太小,遺傳算法的優化性能不太好,易陷入局部最優解。
    • 群體規模太大,計算復雜。
    • 種群規模一般取20-100.

適應度函數

適應度是評價個體優劣的標准。適應度函數是用來區分群體中個體好壞的標准,一般而言適應度函數是由目標函數變換得到的。

  • 將目標函數映射成適應度函數的方法

    • 若目標函數為最大化問題,則\(Fit(f(x))=f(x)\)
    • 若目標函數為最小化問題,則$Fit(f(x))=\frac{1}{f(x)} $
  • 適應度函數的尺度變換:在遺傳算法中,將所有妨礙適應度值高的個體產生,從 而影響遺傳算法正常工作的問題統稱為欺騙問題 (deceptive problem)。如果出現過早收斂則需要縮小這些個體的適應度,以降低這些超級個 體的競爭力。如果停滯現象則需要改變原始適應值的比例關系,以提高個體之 間的競爭力。對適應度函數值域的某種映射變換即為適應度函數的尺度變換(fitness scaling)或者定標

    • 線性變換

      \[f'=af+b\\滿足{f'}_{avg}=f_{avg}\ ,\ {f'}_{max}=C_{mult}\cdot f_{avg}\\ \\ 其中a=\frac{(C_{mult}-1)f_{avg}}{f_{max}-f_{avg}}\qquad b=\frac{(f_{max}-C_{mult}f_{avg})f_{avg}}{f_{max}-f_{avg}} \]

    • 冪函數變換法

      \[f'=f^K \]

      式中冪指數 \(K\) 與求解問題有關,且在算法過程中可按需修正。

    • 指數函數變換法

      \[f'=e^{-af} \]

      式中 \(a\) 決定了復制的強制性,其值越小復制的強制性就越趨於那些具有最大適應度的個體。

選擇

選擇操作也稱為復制(reproduction)操作:從當前群體中按照一定概率選出優良的個體,使它們有機會作為父代繁殖下一代子孫。判斷個體優良與否的准則是各個個體的適應度值,即個體適應度越高,其被選擇的機會就越多。

如果總挑選最好的,則遺傳算法就變成了確定優化方法,使種群過快收斂到局部最優解。如果只做隨機選擇,則遺傳算法就變成完全隨機方法,需要很長時間才收斂。介紹以下幾種常見選擇方法:

  • 個體選擇概率分配

    • 適應度比例方法:各個個體被選擇的概率和其適應度值成比例。設群體規模大小為 \(M\),個體 \(i\) 的適應度值為 \(f_i\),則這個個體被選擇的概率為

      \[p_{si}=\frac{f_i}{\sum\limits^k_{i=1}f_i} \]

    • 排序方法:對每個個體按適應度大小順序對群體中個體進行排序,然后把事先設計好的概率按排序分配給個體作為其選擇概率。概率僅取決於個體在種群中的序位,排在前面的個體有較多的被選擇的機會。常用以下排序方法:

      • 線性排序:群體成員按適應值大小從好到壞依次排列並按下式分配選擇概率

        \[p_i=\frac{a-bi}{M(M+1)} \]

        其中,\(a,b\) 是常數。然后按類似轉盤式選擇的方式選擇父體進行遺傳操作。

      • 非線性排序:群體成員按適應值大小從好到壞依次排列並按下式分配選擇概率

        \[\begin{equation} p_i=\left\{ \begin{aligned} & q(1-q)^{i-1} && i=1,2,\cdots,M-1\\ & (1-q)^{M-1} && i=M \end{aligned} \right. \end{equation} \]

  • 選擇個體方法

    • 輪盤賭選擇:按個體的選擇概率產生一個輪盤,輪盤每個區的角度與個體的選擇概率成比例,然后產生一個隨機數,它落入轉盤的哪個區域就選擇相應的個體交叉。
    • 錦標賽選擇:從群體中隨機選擇 \(k\) 個個體,將其中適應 度最高的個體保存到下一代。這一過程反復執行,直到保存到下一代的個體數達到預先設定的數量為止。參數 \(k\) 稱為競賽規模。
    • 最佳個體保存方法:把群體中適應度最高的個體不進行交叉而直接復制到下一代中,保證遺傳算法終止時得到的最后結果一定是歷代出現過的最高適應度的個體。

交叉

當兩個生物機體配對或者復制時,它們的染色體相互混合,產生一個由雙方基因組成的全新的染色體組。這一過程稱為重組(recombination)或者交叉(crossover)。遺傳算法中起核心作用的是交叉算子,也稱為基因重組(recombination)。采用的交叉方法應能夠使父串的特征遺傳給子串。子串應能夠部分或者全部地繼承父串的結構特征和有效基因。

  • 基本交叉算子

    • 單點交叉:在個體串中隨機設定一個交叉點,實行交叉時,該點前或后的兩個個體的部分結構進行互換, 並生成兩個新的個體。
    • 兩點交叉:隨機設置兩個交叉點,將兩個交叉點之間的碼串相互交換。
    • 均勻交叉:按照均勻概率抽取一些位,每一位是否被選取都是隨機的,並且獨立於其他位。然后將兩個個體被抽取位互換組成兩個新個體。
  • 修正的交叉方式

    由於交叉可能出現不滿足約束條件的非法染色體。為解決這一問題,可以采取構造懲罰函數的方法,但試驗效果不佳,使得本已復雜的問題更加復雜。另一種處理方法是對交叉、變異等遺傳操作作適當的修正,使其自動滿足優化問題的約束條件。

    • 部分匹配交叉PMX:先依據均勻隨機分布產生兩個位串交叉點,定義這兩點之間的區域為一匹配區域,並使用位置交換操作交換兩個父串的匹配區域,再按照匹配區域內的位置映射關系進行交換,從而使排列成為可行調度。

變異

進化機制除了能夠改進已有特征,也能夠產生新的特征。在遺傳算法中,變異是將個體編碼中的一些位進行隨機變化。變異的主要目的是維持群體的多樣性,為選擇、交叉過程中可能丟失的某些遺傳基因進行修復和補充。變異算子的基本內容是對群體中的個體串的某些基因座上的基因值作變動。變異操作是按位進行的,即把某一位的內容進行變異。變異概率是在一個染色體中按位進行變化的概率。主要變異方法有以下5種。

  • 位點變異:群體中的個體碼串,隨機挑選一個或多 個基因座,並對這些基因座的基因值以變異概率作變動。
  • 逆轉變異:在個體碼串中隨機選擇兩點(逆轉點), 然后將兩點之間的基因值以逆向排序插入到原位置中。
  • 插入變異:在個體碼串中隨機選擇一個碼,然后將 此碼插入隨機選擇的插入點中間。
  • 互換變異:隨機選取染色體的兩個基因進行簡單互換。
  • 移動變異:隨機選取一個基因,向左或者向右移動一個隨機位數。

為防止群體重要單一基因丟失,變異概率\(P_m\)通常設置為0.001左右。

遺傳算法的一般步驟

006
  1. 使用隨機方法或者其它方法,產生一個有 \(N\)​ 個染色體的初始群體

    \[pop(1),\ t:=1 \]

  2. 對群體中的每一個染色體 \(pop_i(t)\)​,計算其適應值

    \[f_i=fitness(pop_i(t)) \]

  3. 若滿足停止條件,則算法停止;否則,以概率 \(p_i=f_i/\sum\limits^N_{j=1}f_j\)\(pop(t)\)​中隨機選擇一些染色體構成一個新種群

    \[newpop(t+1)=\{pop_j(t)\mid j=1,2,\cdots,N \} \]

  4. 以概率 \(p_c\)​ 進行交叉產生一些新的染色體,得到一個新的群體

    \[crosspop(t+1) \]

  5. 以一個較小的概率 \(p_m\)使染色體的一個基因發生變異, 形成 \(mutpop(t+1);t:=t+1\)​ ,成為一個新的群體

    \[pop(t)=mutpop(t+1) \]

    返回 2。

遺傳算法的特點

  • 可直接對結構對象進行操作。
  • 利用隨機技術指導對一個被編碼的參數空間進行高效率搜索。
  • 采用群體搜索策略,易於並行化。
  • 僅用適應度函數值來評估個體,並在此基礎上進行遺傳操作,使種群中個體之間進行信息交換。

遺傳算法的改進

雙倍體遺傳算法

  • 基本思想:雙倍體遺傳算法采用顯性和隱性兩個染色體同時進行進化,提供了一種記憶以前有用的基因塊的功能。雙倍體遺傳算法采用顯性遺傳,延長了有用基因塊的壽命,提高了算法的收斂 能力,在變異概率低的情況下能保持一定水平的多樣性。

  • 雙倍體遺傳算法的設計

    1. 編碼/解碼:兩個染色體(顯性、隱性)
    2. 復制算子:計算顯性染色體的適應度,按照顯性染色體的復制概率將個體復制到下一代群體中。
    3. 交叉算子:兩個個體的顯性染色體交叉、隱性染色體也同時交叉。
    4. 變異算子:個體的顯性染色體按正常的變異概率變異; 隱性染色體按較大的變異概率變異。
    5. 雙倍體遺傳算法顯隱性重排算子:個體中適應值較大的染色體設為顯性染色體,適應值較小的染色體設為隱性染色體。
  • 基本流程:

    007

雙種群遺傳算法

  • 基本思想:在遺傳算法中使用多種群同時進化,並交換種群之間優秀個體所攜帶的遺傳信息,以打破種群內的平衡態達到更高的平衡態,有利於算法跳出局部最優。

  • 雙種群遺傳算法的設計:

    1. 編碼/解碼設計
    2. 交叉算子、變異算子
    3. 雜交算子:設種群A與種群B,當A與B種群都完成了選擇、交叉、 變異算子后,產生一個隨機數num,隨機選擇A中num個個體與A中最優個體,隨機選擇B中num個個體與B中最 優個體,交換兩者,以打破平衡態。
  • 基本流程:

    008

自適應遺傳算法

  • 基本思想:使交叉概率\(P_c\)和變異概率\(P_m\)能夠隨適應度變化自動改變。當種群各個體適應度趨於一致或者趨於局部最優時,使\(P_c\)\(P_m\)增加,以跳出局部最優;而當群體適應度比較分散時,使\(P_c\)\(P_m\)減少,以利於優良個體的生存。同時,對於適應度高於群體平均適應值的個體,選擇較低的\(P_c\)\(P_m\),使得該解得以保護進入下一代;對低於平均適應值的個體,選擇較高的\(P_c\)\(P_m\),使該解被淘汰。

  • 自適應遺傳算法的步驟:

    1. 編碼/解碼設計。
    2. 初始種群產生:\(N\)\(N\)是偶數)個候選解,組成初始解集。
    3. 定義適應度函數為\(f=1/ob\),計算適應度 \(f_i\)
    4. 按輪盤賭規則選擇\(N\)個個體,計算 \(f_{avg}\)\(f_{max}\)
    5. 將群體中的各個個體隨機搭配成對,共組成\(N/2\)對, 對每一對個體,按照自適應公式計算自適應交叉概率 \(P_c\), 隨機產生\(R(0,1)\),如果\(R<P_c\)則對該對染色體進行交叉操作。
    6. 對於群體中的所有個體,共\(N\)個,按照自適應變異公式計算自適應變異概率 ,隨機產生\(R(0,1)\),如果\(R<P_m\)則對該染色體進行交叉操作。
    7. 計算由交叉和變異生成新個體的適應度,新個體與父代一起構成新群體。
    8. 判斷是否達到預定的迭代次數,是則結束;否則轉 4。
  • 自適應的交叉概率與變異概率:\(P_c\)\(P_m\)按照以下公式進行調整

    \[\begin{equation} p_c=\left\{ \begin{aligned} & \frac{k_1(f_{max}-f')}{f_{max}-f_{avg}} && f'>f_{avg}\\ & k_2 && f'\le f_{avg} \end{aligned} \right. \end{equation} \]

    \[\begin{equation} p_m=\left\{ \begin{aligned} & \frac{k_3(f_{max}-f')}{f_{max}-f_{avg}} && f'>f_{avg}\\ & k_4 && f'\le f_{avg} \end{aligned} \right. \end{equation} \]

    式中 \(f_{max}\)是群體中最大的適應度值;\(f_{avg}\)是每代群體的平均適應度值;\(f'\)是要交叉的兩個個體中較大的適應度值;\(f\)是要變異的個體的適應度值。\(k_1,\ k_2,\ k_3,\ k_4\)\((0,\ 1)\)之間的常數。

遺傳算法的應用

群智能算法產生的背景

由簡單個體組成的群落與環境以及個體之間的互動行為稱為群體智能。群智能算法(swarm algorithms,SI)是受動物群體智能啟發的算法。群智能算法包括:粒子群優化算法、蟻群算法、蜂群算法等。

009

粒子群優化算法

粒子群優化算法的基本原理

粒子群優化(Particle Swarm Optimization, PSO)算法的基本概念源於對鳥群覓食行為的研究。其基本思想是將每個個體看作n維搜索空間中一個沒有體積質量的粒子,在 搜索空間中以一定的速度飛行,該速度決定粒子飛行的方向和距離。所有粒子還有一個由被優化的函數決定的適應值。PSO初始化為一群隨機粒子,然后通過迭代找到最優解。在每 一次迭代中,粒子通過跟蹤兩個“極值”來更新自己。第一個就是粒子本身所找到的最優解,這個解稱為個體極值。另個一是整個種群目前找到的最優解,這個解稱為全局極值。

  • 算法定義:在 n 維連續搜索空間中,對粒子群中的第 \(i(i=1,2,\cdots,m)\) 個粒子,定義

    • n 維當前位置向量 \(x^i(k)=[x^i_1,x^i_2,\cdots,x^i_n]^T\) :表示搜索空間中粒子的當前位置。
    • n 維最優位置向量 \(p^i(k)=[p^i_1,p^i_2,\cdots,p^i_n]^T\) 表示該粒子至今所獲得的具有最優適應度 \(f^i_p(k)\)的位置。
    • n 維速度位置向量 \(v^i(k)=[v^i_1,v^i_2,\cdots,v^i_n]^T\) 表示該粒子的搜索方向。

    每個粒子經歷過的最優位置(pbest)記為 \(p^i(k)=[p^i_1\quad p^i_2\cdots p^i_n]\), 群體經歷過的最優位置(gbest)記為 \(p^g(k)=[p^g_1\quad p^g_2\cdots p ^g_n]\),則基本的PSO算法為:

    \[v^i_j(k+1)=\omega(k)v^i_j(k)+\varphi_1\ rand(0,a_1)(p^i_j(k)-x^i_j(k))+\varphi_2\ rand(0,a_2)(p^g_j(k)-x^i_j(k))\\ \\x^i_j(k+1)=x^i_j(k)+v^i_j(k+1)\qquad i=1,2,\cdots,m;\ j=1,2,\cdots,n \]

    其中 \(\omega\) 是慣性權重因子。\(\varphi_1、\varphi_2\) 是加速度常數,均為非負值。\(rand(0,a_1)\)\(rand(0,a_2)\)\([0,a_1]、[0,a_2]\) 范圍內的具有均勻分布的隨機數,\(a_1\)\(a_2\)為相應的控制參數。

    上述等式等號右側:

    • 第一部分是粒子在前一時刻的速度;
    • 第二部分為個體“認知”分量,表示粒子本身的思考,將現有的位置和曾經經歷過的最優解位置相比;
    • 第三部分是群體“社會”分量,表示粒子間的信息共享與相互合作;
    • \(\varphi_1、\varphi_2\) 分別控制個體認知分量和社會分量相對貢獻的學習率;
    • \(rand(0,a_1)\)\(rand(0,a_2)\) 增加認知和社會搜索方向的隨機性和算法多樣性。
  • 基於學習率\(\varphi_1、\varphi_2\) ,Kennedy給出以下4 種類型的PSO模型

    • \(\varphi_1>0,\varphi_2>0\),則稱該算法為PSO全模型。
    • \(\varphi_1>0,\varphi_2=0\),則稱該算法為PSO認知模型。
    • \(\varphi_1=0,\varphi_2>0\),則稱該算法為PSO社會模型。
    • \(\varphi_1=0,\varphi_2>0且g\ne i\),則稱該算法為PSO無私模型。
  • 粒子群優化算法的流程:

    1. 初始化每個粒子,即在允許范圍內隨機設置每個粒子的初始位置和速度。

    2. 評價每個粒子的適應度,計算每個粒子的目標函數。

    3. 設置每個粒子的 \(p_i\)。對每個粒子,將其適應度與其經歷過的最好位置 \(p_i\) 進行比較,如果優於 \(p_i\),則將其作為該粒子的最好位置 \(p_i\)

    4. 設置全局最優值 \(P_g\)。對每個粒子,將其適應度與群體經歷過的最好位置 \(P_g\) 進行比較,如果優於 \(P_g\),則將其作為當前群體的最好位置 \(P_g\)

    5. 根據上方公式更新粒子的速度和位置。

    6. 檢查終止條件。如果未達到設定條件(預設誤差或 者迭代的次數),則返回第 2 步。

      010

粒子群優化算法的參數分析

  • PSO算法的參數

    • 最大速度 \(V_{max}\):對速度 \(v_i\),算法中有最大速度 \(V_{max}\)作為限制,如果當前 粒子的某維速度大於最大速度\(V_{max}\),則該維的速度就被限制為最大速度\(V_{max}\)
    • 慣性權重 \(\omega\):粒子保持運動慣性,使其有擴展搜索空間的趨勢,並有能力搜索新的區域。
    • 加速度 \(\varphi_1,\varphi_2\):加速度常數 \(\varphi_1,\varphi_2\) 代表將每個粒子推向 \(P_i,P_g\) 位置的統計加速度項的權重。低的值允許粒子在被拉回之前可以在目標區域外徘徊,而高的值則導致粒子突然沖向或者越過目標區域。
  • 位置更新方程中各部分的影響

    • 只有第1部分,即 \(\varphi_1=\varphi_2=0\):粒子將一直以當前的速度飛行,直到達邊界。 由於它只能搜索有限的區域,所以很難找到好解。
    • 沒有第1部分,即 \(\omega=0\):速度只取決於粒子當前位置和其歷史最好位置 \(P_i,P_g\), 速度本身沒有記憶性。
    • 沒有第2部分,即 \(\varphi_1=0\):粒子沒有認知能力,也就是“只有社會模型” 。在粒子的相互作用下,有能力達到新的搜索空間。但對復雜問題,容易陷入局部最優點。
    • 沒有第2部分,即 \(\varphi_2=0\):粒子間沒有社會共享信息,也就是“只有認知”模型。因為個體間沒有交互,一個規模為M的群體等價於M個單個粒子的運行,因而得到最優解的機率非常小。
  • 參數設置

    \(\omega\) 固定為1.0, \(\varphi_1,\varphi_2\) 固定為2.0,因此 \(V_{max}\) 成為唯一需要調節的參數,通常設為每維變化范 圍10%~20%。Suganthan的實驗表明, \(\varphi_1,\varphi_2\) 為常數時 可以得到較好的解,但不一定必須為2。這些參數也可以通過模糊系統進行調節。Shi和Eberhart 提出一個模糊系統來調節 \(\omega\)

粒子群優化算法的應用領域

粒子群優化算法在車輛路徑問題的應用

蟻群算法

20世紀90年代初,意大利科學家Marco Dorigo等受螞蟻覓食行為的啟發,提出蟻群算法(Ant Colony Optimization,ACO)。一種應用於組合優化問題的啟發式搜索算法。在解決離散組合優化方面具有良好的性能。

  • 信息素跟蹤:按照一定的概率沿着信息素較強的路徑覓食。
  • 信息素遺留:會在走過的路上會釋放信息素,使得在一定的范圍內的其他螞蟻能夠覺察到並由此影響它們的行為。
  • 環境:有障礙物、有其他螞蟻、有信息素。
  • 覓食規則:范圍內尋找是否有食物,否則看是否有信息素,每只螞蟻都會以小概率犯錯。
  • 移動規則:都朝信息素最多的方向移動,無信息素則繼續朝原方向移動,且有隨機的小的擾動,有記憶性。
  • 避障規則:移動的方向如有障礙物擋住,螞蟻會隨機選擇另一個方向。
  • 信息素規則:越靠近食物播撒的信息素越多,越離開食物播撒的信息素越少。

基本蟻群算法模型

蟻群優化算法的第一個應用是著名的旅行商問題。

蟻群系統模型:

  • \(m\):是蟻群中螞蟻的數量

  • \(d_{xy}(x,y=1,···,n)\):表示元素(城市) 和元素(城市) 之間的距離。

  • \(\eta_{xy}(t)\):表示能見度,稱為啟發信息函數,等於距離的倒數,即 \(\eta_{xy}(t)=\frac{1}{d_{xy}}\)

  • \(b_x(t)\):表示 t 時刻位於城市x的螞蟻的個數,\(m=\sum\limits^n_{x=1}b_x(t)\)

  • \(\tau_{xy}(t)\):表示 t 時刻在 xy 連線上殘留的信息素,初始時刻,各條路徑上的信息素相等即\(\tau_{sy}(0)=C(const)\)。螞蟻k在運動過程中,根據各條路徑上的信息素決定轉移方向。

  • \(P^k_{xy}(t)\)​:表示在 t 時刻螞蟻 k 選擇從元素(城市) x 轉移到元素(城 市) y 的概率,也稱為隨機比例規則。由信息素和局部啟發信息共同決定。

    \[\begin{equation} P^k_{xy}(t)=\left\{ \begin{aligned} & \frac{\mid\tau_{xy}(t)\mid^\alpha\mid\eta_{xy}(t)\mid^\beta}{\sum\limits_{y\in allowed_k(x)}} && if\quad y\in allowed_k(x)\\ & 0 && 其他 \end{aligned} \right. \end{equation} \]

    • \(allowed_k(x)=\{0,1,···,n-1\}-tabu_k(x)=\{c-tabu_k(x)\}\)表示螞蟻 k 下一步允許選擇的城市。
    • \(tabu_k(x)(k=1,2,···,m)\)記錄螞蟻 k 當前所走過的城市。
    • \(\alpha\) 是信息素啟發式因子,表示軌跡的相對重要性。
      • \(\alpha\) 值越大該螞蟻越傾向於選擇其它螞蟻經過的路徑,該狀態轉移概率越接近於貪婪規則。
      • \(\alpha=0\) 時不再考慮信息素水平,算法就成為有多重起點的隨機貪婪算法。
      • \(\beta=0\) 時算法就成為純粹的正反饋的啟發式算法。
  • 用參數 \(1-\rho\) 表示信息素消逝程度,螞蟻完成一次循環,各路徑上信息素濃度消散規則為:\(\tau_{xy}(t)=\rho\tau_{xy}(t)+\Delta\tau_{xy}(t)\),蟻群的信息素濃度更新規則為:\(\Delta\tau_{xy}(t)=\sum\limits^m_{k=1}\Delta\tau^k_{xy}(t)\)。M. Dorigo給出 \(\Delta\tau^k_{xy}(t)\)三種不同模型:

    • 螞蟻圈系統(Ant-cycle System):單只螞蟻所訪問路徑上的信息素濃度更新規則為:

      \[\begin{equation} \Delta\tau^k_{xy}(t)=\left\{ \begin{aligned} & \frac{Q}{L_k} && 若第k值螞蟻在本次循環中從x到y\\ & 0 && 否則 \end{aligned} \right. \end{equation} \]

      其中:

      • \(\tau_{xy}(t)\)為當前路徑上的信息素
      • \(\Delta\tau_{xy}(t)\)為路徑(x, y)上信息素的增量
      • \(\Delta\tau^k_{xy}(t)\)為第k只螞蟻留在路徑(x, y)上的信息素的增量
      • \(Q\)為常數
      • \(L_k\)為優化問題的目標函數值,表示第k只螞蟻在本次循環中所走路徑的長度

      螞蟻圈系統利用的是全局信息 \(Q/L_k\),即螞蟻完成一個循環后,更新所有路徑上的信息。效果最好,通常作為蟻群優化算法的基本模型。

    • 螞蟻數量系統(Ant-quantity System)

      \[\begin{equation} \Delta\tau^k_{xy}(t)=\left\{ \begin{aligned} & \frac{Q}{d_k} && 若第k值螞蟻在本次循環中從x到y\\ & 0 && 否則 \end{aligned} \right. \end{equation} \]

      螞蟻數量系統 利用的是局部信息 \(Q/d_k\),即螞蟻每走一步都要更新殘留信息素的濃度。

    • 螞蟻密度系統(Ant-density System)

      \[\begin{equation} \Delta\tau^k_{xy}(t)=\left\{ \begin{aligned} & Q && 若第k值螞蟻在本次循環中從x到y\\ & 0 && 否則 \end{aligned} \right. \end{equation} \]

      螞蟻密度系統 利用的是局部信息 \(Q\),即螞蟻每走一步都要更新殘留信息素的濃度。

  • 全局信息更新方法的優點:

    • 保證了殘留信息素不至於無限累積;
    • 如果路徑沒有被選中,那么上面的殘留信息素會隨時間的推移而逐漸減弱,這使算法能“忘記”不好的路徑;
    • 即使路徑經常被訪問也不至於因為 \(\Delta\tau^k_{xy}(t)\) 的累積,而產生 \(\Delta\tau^k_{xy}(t)\gg\eta_{xy}(t)\) 使期望值的作用無法體現;
    • 充分體現了算法中全局范圍內較短路徑(較好解)的生存能力;
    • 加強了信息正反饋性能;
    • 提高了系統搜索收斂的速度。

蟻群算法的參數選擇

  • 信息素啟發因子 \(\alpha\)
    • 反映了蟻群在路徑搜索中隨機性因素作用的強度;
    • \(\alpha\)值越大,螞蟻選擇以前走過的路徑的可能性越大,搜索的隨機性減弱;
    • \(\alpha\) 過大時會使蟻群的搜索過早陷於局部最優。
  • 期望值啟發式因子 \(\beta\)
    • 反映了蟻群在路徑搜索中先驗性、確定性因素作用的強度;
    • \(\beta\)值越大,螞蟻在某個局部點上選擇局部最短路徑的可能性越大;
    • 雖然搜索的收斂速度得以加快,但蟻群在最優路徑的搜索過程中隨機性減弱,易於陷入局部最優。
  • 信息素揮發度 \(1-\rho\)
    • 當要處理的問題規模比較大時,會使那些從來未被搜索到的路徑(可行解) 上的信息量減小到接近於0,因而降低了算法的全局搜索能力;
    • 而且當 \(1-\rho\) 過大時,以前搜索過的路徑被再次選擇的可能性過大,也會影響到算法的隨機性能和全局搜索能力;
    • 反之,通過減小信息素揮發度 \(1-\rho\) 雖然可以提高算法的隨機性能和全局 搜索能力,但又會使算法的收斂速度降低。

蟻群算法的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM