智慧型算法

智慧型算法

“智慧型算法”是指在工程實踐中,經常會接觸到一些比較“新穎”的算法或理論,比如模擬退火,遺傳算法,禁忌搜尋,神經網路,天牛須搜尋算法等。這些算法或理論都有一些共同的特性(比如模擬自然過程。它們在解決一些複雜的工程問題時大有用武之地。

智慧型算法研究

這些算法都有什麼含義?首先給出個局部搜尋,模擬退火,遺傳算法,禁忌搜尋的形象比喻:

為了找出地球上最高的山,一群有志氣的兔子們開始想辦法。

1.兔子朝著比現在高的地方跳去。他們找到了不遠處的最高山峰。但是這座山不一定是珠穆朗瑪峰。這就是局部搜尋,它不能保證局部最優值就是全局最優值。

2.兔子喝醉了。他隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,他漸漸清醒了並朝最高方向跳去。這就是模擬退火。

3.兔子們吃了失憶藥片,並被發射到太空,然後隨機落到了地球上的某些地方。他們不知道自己的使命是什麼。但是,如果你過幾年就殺死一部分海拔低的兔子,多產的兔子們自己就會找到珠穆朗瑪峰。這就是遺傳算法。

4.兔子們知道一個兔的力量是渺小的。他們互相轉告著,哪裡的山已經找過,並且找過的每一座山他們都留下一隻兔子做記號。他們制定了下一步去哪裡尋找的策略。這就是禁忌搜尋。

智慧型算法概述

智慧型最佳化算法要解決的一般是最最佳化問題。最最佳化問題可以分為(1)求解一個函式中,使得函式值最小的自變數取值的函式最佳化問題和(2)在一個解空間裡面,尋找最優解,使目標函式值最小的組合最佳化問題。典型的組合最佳化問題有:旅行商問題(Traveling Salesman Problem,TSP),加工調度問題(Scheduling Problem),0-1背包問題(Knapsack Problem),以及裝箱問題(Bin Packing Problem)等。

最佳化算法有很多,經典算法包括:有線性規劃,動態規劃等;改進型局部搜尋算法包括爬山法,最速下降法等,本文介紹的模擬退火、遺傳算法以及禁忌搜尋稱作指導性搜尋法。而神經網路,混沌搜尋則屬於系統動態演化方法。

最佳化思想裡面經常提到鄰域函式,它的作用是指出如何由當前解得到一個(組)新解。其具體實現方式要根據具體問題分析來定。

一般而言,局部搜尋就是基於貪婪思想利用鄰域函式進行搜尋,若找到一個比現有值更優的解就棄前者而取後者。但是,它一般只可以得到“局部極小解”,就是說,可能這隻兔子登“登泰山而小天下”,但是卻沒有找到珠穆朗瑪峰。而模擬退火,遺傳算法,禁忌搜尋,神經網路等從不同的角度和策略實現了改進,取得較好的“全局最小解”。

算法分類

模擬退火算法

模擬退火算法的依據是固體物質退火過程和組合最佳化問題之間的相似性。物質在加熱的時候,粒子間的布朗運動增強,到達一定強度後,固體物質轉化為液態,這個時候再進行退火,粒子熱運動減弱,並逐漸趨於有序,最後達到穩定。

模擬退火的解不再像局部搜尋那樣最後的結果依賴初始點。它引入了一個接受機率p。如果新的點(設為pn)的目標函式f(pn)更好,則p=1,表示選取新點;否則,接受機率p是當前點(設為pc)的目標函式f(pc),新點的目標函式f(pn)以及另一個控制參數“溫度”T的函式。也就是說,模擬退火沒有像局部搜尋那樣每次都貪婪地尋找比現在好的點,目標函式差一點的點也有可能接受進來。隨著算法的執行,系統溫度T逐漸降低,最後終止於某個低溫,在該溫度下,系統不再接受變化。

模擬退火的典型特徵是除了接受目標函式的改進外,還接受一個衰減極限,當T較大時,接受較大的衰減,當T逐漸變小時,接受較小的衰減,當T為0時,就不再接受衰減。這一特徵意味著模擬退火與局部搜尋相反,它能避開局部極小,並且還保持了局部搜尋的通用性和簡單性。

在物理上,先加熱,讓分子間互相碰撞,變成無序狀態,內能加大,然後降溫,最後的分子次序反而會更有序,內能比沒有加熱前更小。就像那隻兔子,它喝醉後,對比較近的山峰視而不見,迷迷糊糊地跳一大圈子,反而更有可能找到珠峰。

值得注意的是,當T為0時,模擬退火就成為局部搜尋的一個特例。

模擬退火的偽碼錶達:

procedure simulated annealing

begin

t:=0;

initialize temperature T

select a current string vc at random;

evaluate vc;

repeat

repeat

select a new string vn in the neighborhood of vc; (1)

if f(vc)<f(vn)

then vc:=vn;

else if random [0,1] <exp ((f (vn)-f (vc))/T) (2)

then vc:=vn;

until (termination-condition) (3)

T:=g(T,t); (4)

T:=t+1;

until (stop-criterion) (5)

end;

上面的程式中,關鍵的是(1)新狀態產生函式,(2)新狀態接受函式,(3)抽樣穩定準則,(4)退溫函式,(5)退火結束準則(簡稱三函式兩準則)是直接影響最佳化結果的主要環節。雖然實驗結果證明初始值對於最後的結果沒有影響,但是初溫越高,得到高質量解的機率越大。所以,應該儘量選取比較高的初溫。

上面關鍵環節的選取策略:

(1)狀態產生函式:候選解由當前解的鄰域函式決定,可以取互換,插入,逆序等操作產生,然後根據機率分布方式選取新的解,機率可以取均勻分布、常態分配、高斯分布、柯西分布等。

(2)狀態接受函式:這個環節最關鍵,但是,實驗表明,何種接受函式對於最後結果影響不大。所以,一般選取min [1, exp ((f (vn)-f (vc))/T)]。

(3)抽樣穩定準則:一般常用的有:檢驗目標函式的均值是否穩定;連續若干步的目標值變化較小;規定一定的步數;

(4)退溫函式:如果要求溫度必須按照一定的比率下降,SA算法可以採用,但是溫度下降很慢;快速SA中,一般採用 。目前,經常用的是 ,是一個不斷變化的值。

(5)退火結束準則:一般有:設定終止溫度;設定疊代次數;搜尋到的最優值連續多次保持不變;檢驗系統熵是否穩定。

為了保證有比較優的解,算法往往採取慢降溫、多抽樣、以及把“終止溫度”設的比較低等方式,導致算法運行時間比較長,這也是模擬退火的最大缺點。人喝醉了酒辦起事來都不利索,何況兔子?

遺傳算法

“物競天擇,適者生存”,是進化論的基本思想。遺傳算法就是模擬自然界想做的事。遺傳算法可以很好地用於最佳化問題,若把它看作對自然過程高度理想化的模擬,更能顯出它本身的優雅——雖然生存競爭是殘酷的。

遺傳算法以一種群體中的所有個體為對象,並利用隨機化技術指導對一個被編碼的參數空間進行高效搜尋。其中,選擇、交叉和變異構成了遺傳算法的遺傳操作;參數編碼、初始群體的設定、適應度函式的設計、遺傳操作設計、控制參數設定五個要素組成了遺傳算法的核心內容。作為一種新的全局最佳化搜尋算法,遺傳算法以其簡單通用、健壯性強、適於並行處理以及高效、實用等顯著特點,在各個領域得到了廣泛套用,取得了良好效果,並逐漸成為重要的智慧型算法之一。

遺傳算法的偽碼:

procedure genetic algorithm

begin

initialize a group and evaluate the fitness value ; (1)

while not convergent (2)

begin

select; (3)

if random[0,1]<pc then

crossover; (4)

if random (0,1)<pm then

mutation; (5)

end;

end

上述程式中有五個重要的環節:

(1)編碼和初始群體的生成:GA在進行搜尋之前先將解空間的解數據表示成遺傳空間的基因型串結構數據,這些串結構數據的不同組合便構成了不同的點。然後隨機產生N個初始串結構數據,每個串結構數據稱為一個個體, N個體構成了一個群體。GA以這N個串結構數據作為初始點開始疊代。

比如,旅行商問題中,可以把商人走過的路徑進行編碼,也可以對整個圖矩陣進行編碼。編碼方式依賴於問題怎樣描述比較好解決。初始群體也應該選取適當,如果選取的過小則雜交優勢不明顯,算法性能很差(數量上占了優勢的老鼠進化能力比老虎強),群體選取太大則計算量太大。

(2)檢查算法收斂準則是否滿足,控制算法是否結束。可以採用判斷與最優解的適配度或者定一個疊代次數來達到。

(3)適應性值評估檢測和選擇:適應性函式表明個體或解的優劣性,在程式的開始也應該評價適應性,以便和以後的做比較。不同的問題,適應性函式的定義方式也不同。根據適應性的好壞,進行選擇。選擇的目的是為了從當前群體中選出優良的個體,使它們有機會作為父代為下一代繁殖子孫。遺傳算法通過選擇過程體現這一思想,進行選擇的原則是適應性強的個體為下一代貢獻一個或多個後代的機率大。選擇實現了達爾文的適者生存原則。

(4)雜交:按照雜交機率(pc)進行雜交。雜交操作是遺傳算法中最主要的遺傳操作。通過雜交操作可以得到新一代個體,新個體組合了其父輩個體的特性。雜交體現了信息交換的思想。

可以選定一個點對染色體串進行互換,插入,逆序等雜交,也可以隨機選取幾個點雜交。雜交機率如果太大,種群更新快,但是高適應性的個體很容易被淹沒,機率小了搜尋會停滯。

(5)變異:按照變異機率(pm)進行變異。變異首先在群體中隨機選擇一個個體,對於選中的個體以一定的機率隨機地改變串結構數據中某個串的值。同生物界一樣,GA中變異發生的機率很低。變異為新個體的產生提供了機會。

變異可以防止有效基因的缺損造成的進化停滯。比較低的變異機率就已經可以讓基因不斷變更,太大了會陷入隨機搜尋。想一下,生物界每一代都和上一代差距很大,會是怎樣的可怕情形。

就像自然界的變異適和任何物種一樣,對變數進行了編碼的遺傳算法沒有考慮函式本身是否可導,是否連續等性質,所以適用性很強;並且,它開始就對一個種群進行操作,隱含了並行性,也容易找到“全局最優解”。

禁忌搜尋算法

為了找到“全局最優解”,就不應該執著於某一個特定的區域。局部搜尋的缺點就是太貪婪地對某一個局部區域以及其鄰域搜尋,導致一葉障目,不見泰山。禁忌搜尋就是對於找到的一部分局部最優解,有意識地避開它(但不是完全隔絕),從而獲得更多的搜尋區間。兔子們找到了泰山,它們之中的一隻就會留守在這裡,其他的再去別的地方尋找。就這樣,一大圈後,把找到的幾個山峰一比較,珠穆朗瑪峰脫穎而出。

當兔子們再尋找的時候,一般地會有意識地避開泰山,因為他們知道,這裡已經找過,並且有一隻兔子在那裡看著了。這就是禁忌搜尋中“禁忌表(tabu list)”的含義。那隻留在泰山的兔子一般不會就安家在那裡了,它會在一定時間後重新回到找最高峰的大軍,因為這個時候已經有了許多新的訊息,泰山畢竟也有一個不錯的高度,需要重新考慮,這個歸隊時間,在禁忌搜尋裡面叫做“禁忌長度(tabu length)”;如果在搜尋的過程中,留守泰山的兔子還沒有歸隊,但是找到的地方全是華北平原等比較低的地方,兔子們就不得不再次考慮選中泰山,也就是說,當一個有兔子留守的地方優越性太突出,超過了“best to far”的狀態,就可以不顧及有沒有兔子留守,都把這個地方考慮進來,這就叫“特赦準則(aspiration criterion)”。這三個概念是禁忌搜尋和一般搜尋準則最不同的地方,算法的最佳化也關鍵在這裡。

偽碼錶達:

procedure tabu search;

begin

initialize a string vc at random,clear up the tabu list;

cur:=vc;

repeat

select a new string vn in the neighborhood of vc;

if va>best_to_far then {va is a string in the tabu list}

begin

cur:=va;

let va take place of the oldest string in the tabu list;

best_to_far:=va;

end else

begin

cur:=vn;

let vn take place of the oldest string in the tabu list;

end;

until (termination-condition);

end;

以上程式中有關鍵的幾點:

(1)禁忌對象:可以選取當前的值(cur)作為禁忌對象放進tabu list,也可以把和當然值在同一“等高線”上的都放進tabu list。

(2)為了降低計算量,禁忌長度和禁忌表的集合不宜太大,但是禁忌長度太小容易循環搜尋,禁忌表太小容易陷入“局部極優解”。

(3)上述程式段中對best_to_far的操作是直接賦值為最優的“解禁候選解”,但是有時候會出現沒有大於best_to_far的,候選解也全部被禁的“死鎖”狀態,這個時候,就應該對候選解中最佳的進行解禁,以能夠繼續下去。

(4)終止準則:和模擬退火,遺傳算法差不多,常用的有:給定一個疊代步數;設定與估計的最優解的距離小於某個範圍時,就終止搜尋;當與最優解的距離連續若干步保持不變時,終止搜尋;

禁忌搜尋是對人類思維過程本身的一種模擬,它通過對一些局部最優解的禁忌(也可以說是記憶)達到接納一部分較差解,從而跳出局部搜尋的目的。

人工神經網路

人工神經網路(Artificial Neural Network,ANN)

神經網路從名字就知道是對人腦的模擬。它的神經元結構,它的構成與作用方式都是在模仿人腦,但是也僅僅是粗糙的模仿,遠沒有達到全面的地步。和馮·諾依曼機不同,神經網路計算非數字,非精確,高度並行,並且有自學習功能。

生命科學中,神經細胞一般稱作神經元,它是整個神經結構的最基本單位。每個神經細胞就像一條胳膊,其中像手掌的地方含有細胞核,稱作細胞體,像手指的稱作樹突,是信息的輸入通路,像手臂的稱作軸突,是信息的輸出通路;神經元之間錯綜複雜地連在一起,互相之間傳遞信號,而傳遞的信號可以導致神經元電位的變化,一旦電位高出一定值,就會引起神經元的激發,此神經元就會通過軸突傳出電信號。

而如果要用計算機模仿生物神經,就需要人工的神經網路有三個要素:(1)形式定義人工神經元;(2)給出人工神經元的連線方式,或者說給出網路結構;(3)給出人工神經元之間信號強度的定義。

歷史上第一個人工神經網路模型稱作M-P模型,非常簡單:

其中,表示神經元i在t時刻的狀態,為1表示激發態,為0表示抑制態;是神經元i和j之間的連線強度;表示神經元i的閾值,超過這個值神經元才能激發。

這個模型是最簡單的神經元模型。但是功能已經非常強大:此模型的發明人McCulloch和Pitts已經證明,不考慮速度和實現的複雜性,它可以完成當前數字計算機的任何工作。

以上這個M-P模型僅僅是一層的網路,如果從對一個平面進行分割的方面來考慮的話,M-P網路只能把一個平面分成個半平面,卻不能夠選取特定的一部分。而解決的辦法就是“多層前向網路”。

為了讓這種網路有合適的權值,必須給網路一定的激勵,讓它自己學習,調整。一種方法稱作“向後傳播算法(Back Propagation,BP)”,其基本思想是考察最後輸出解和理想解的差異,調整權值,並把這種調整從輸出層開始向後推演,經過中間層,達到輸入層。

可見,神經網路是通過學習來達到解決問題的目的,學習沒有改變單個神經元的結構和工作方式,單個神經元的特性和要解決的問題之間也沒有直接聯繫,這裡學習的作用是根據神經元之間激勵與抑制的關係,改變它們的作用強度。學習樣本中的任何樣品的信息都包含在網路的每個權值之中。

BP算法中有考察輸出解和理想解差異的過程,假設差距為w,則調整權值的目的就是為了使得w最小化。這就又包含了前文所說的“最小值”問題。一般的BP算法採用的是局部搜尋,比如最速下降法,牛頓法等,當然如果想要得到全局最優解,可以採用模擬退火,遺傳算法等。當前向網路採用模擬退火算法作為學習方法的時候,一般成為“波爾茲曼網路”,屬於隨機性神經網路。

在學習BP算法學習的過程中,需要已經有一部分確定的值作為理想輸出,這就好像中學生在學習的時候,有老師的監督。如果沒有了監督,人工神經網路該怎么學習?

就像沒有了巨觀調控,自由的市場引入了競爭一樣,有一種學習方法稱作“無監督有競爭的學習”。在輸入神經元i的若干個神經元之間開展競爭,競爭之後,只有一個神經元為1,其他均為0,而對於失敗的神經元,調整使得向對競爭有利的方向移動,則最終也可能在一次競爭中勝利;

人工神經網路還有反饋網路如Hopfield網路,它的神經元的信號傳遞方向是雙向的,並且引入一個能量函式,通過神經元之間不斷地相互影響,能量函式值不斷下降,最後能給出一個能量比較低的解。這個思想和模擬退火差不多。

人工神經網路套用到算法上時,其正確率和速度與軟體的實現聯繫不大,關鍵的是它自身的不斷學習。這種思想已經和馮·諾依曼模型很不一樣。

粒子群算法

粒子群最佳化算法(PSO)是一種進化計算技術(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。該算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的一個簡化模型。粒子群算法在對動物集群活動行為觀察基礎上,利用群體中的個體對信息的共享使整個群體的運動在問題求解空間中產生從無序到有序的演化過程,從而獲得最優解。

PSO同遺傳算法類似,是一種基於疊代的最佳化算法。系統初始化為一組隨機解,通過疊代搜尋最優值。但是它沒有遺傳算法用的交叉(crossover)以及變異(mutation),而是粒子在解空間追隨最優的粒子進行搜尋。同遺傳算法比較,PSO的優勢在於簡單容易實現並且沒有許多參數需要調整。目前已廣泛套用於函式最佳化,神經網路訓練,模糊系統控制以及其他遺傳算法的套用領域。

PSO模擬鳥群的捕食行為。構想這樣一個場景:一群鳥在隨機搜尋食物。在這個區域裡只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那么找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。

PSO從這種模型中得到啟示並用於解決最佳化問題。PSO中,每個最佳化問題的解都是搜尋空間中的一隻鳥。我們稱之為“粒子”。所有的粒子都有一個由被最佳化的函式決定的適應值(fitness value),每個粒子還有一個速度決定他們飛翔的方向和距離。然後粒子們就追隨當前的最優粒子在解空間中搜尋。

PSO 初始化為一群隨機粒子(隨機解)。然後通過疊代找到最優解。在每一次疊代中,粒子通過跟蹤兩個"極值"來更新自己。第一個就是粒子本身所找到的最優解,這個解叫做個體極值pBest。另一個極值是整個種群目前找到的最優解,這個極值是全局極值gBest。另外也可以不用整個種群而只是用其中一部分作為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。

天牛須搜尋算法

天牛須搜尋算法(Beetle Antennae Search Algorithm,BAS)

天牛須搜尋算法是一種生物啟發的智慧型最佳化算法,是受到天牛覓食原理啟發而開發的算法,其仿生原理如下:

當天牛覓食時,天牛並不知道實物在哪裡,而是根據食物氣味的強弱來覓食。天牛有兩隻長觸角,如果左邊觸角收到的氣味強度比右邊大,那下一步天牛就往左飛,否則就往右飛,依據這一原理天牛可以找到食物。

食物的氣味就相當於一個函式,這個函式在三維空間每個點值都不同,天牛兩個須可以採集自身附近兩點的氣味值,天牛的目的是找到全局氣味值最大的點(即食物所在位置)。仿照天牛的行為,我們設計了該智慧型最佳化算法進行函式最最佳化求解。

天牛須搜尋算法核心代碼:

dir=rands(k,1);dir=dir/norm(dir);%須的方向

xleft=x+dir*d0/2;xright=x-dir*d0/2;%須的坐標

fleft=f(xleft);fright=f(xright);%須的氣味強度

x=x-step*dir*sign(fleft-fright);%下一步位置

天牛在三維空間運動,而天牛須搜尋需要對任意維函式都有效才可以。因而,天牛須搜尋是對天牛生物行為在任意維空間的推廣。採用如下模型描述天牛須搜尋算法的尋優策略:

1. 天牛左右兩須位於質心兩邊。

2. 天牛步長step與兩須之間距離d0的比值是個固定常數即step=c*d0其中c是常數。即,大天牛(兩須距離長)走大步,小天牛走小步。

3. 天牛飛到下一步後,頭的朝向是隨機的。

總結

模擬退火,遺傳算法,禁忌搜尋,神經網路和天牛須搜尋算法在解決全局最優解的問題上有著獨到的優點,並且,它們有一個共同的特點:都是模擬了自然過程。模擬退火思路源於物理學中固體物質的退火過程,遺傳算法借鑑了自然界優勝劣汰的進化思想,禁忌搜尋模擬了人類有記憶過程的智力過程,神經網路更是直接模擬了人腦,天牛須搜尋算法則是模擬了天牛在尋找事物或配偶時的搜尋過程。

它們之間的聯繫也非常緊密,比如模擬退火和遺傳算法為神經網路提供更優良的學習算法提供了思路。把它們有機地綜合在一起,取長補短,性能將更加優良。

這幾種智慧型算法有別於一般的按照圖靈機進行精確計算的程式,尤其是人工神經網路,是對計算機模型的一種新的詮釋,跳出了馮·諾依曼機的圈子,按照這種思想來設計的計算機有著廣闊的發展前景

相關詞條

相關搜尋

熱門詞條

聯絡我們