1. 程式人生 > >智慧優化演算法總結

智慧優化演算法總結

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

梯度為基礎的傳統優化演算法具有較高的計算效率、較強的可靠性、比較成熟等優點,是一類最重要的、應用最廣泛的優化演算法。但是,傳統的最優化方法在應用於複雜、困難的優化問題時有較大的侷限性。一個優化問題稱為是複雜的,通常是指具有下列特徵之一:(1)目標函式沒有明確解析表達;(2)目標函式雖有明確表達,但不可能恰好估值;(3)目標函式為多峰函式;(4)目標函式有多個,即多目標優化。一個優化問題稱為是困難的,通常是指:目標函式或約束條件不連續、不可微、高度非線性,或者問題本身是困難的組合問題。傳統優化方法往往要求目標函式是凸的、連續可微的,可行域是凸集等條件,而且處理非確定性資訊的能力較差。這些弱點使傳統優化方法在解決許多實際問題時受到了限制。

智慧優化演算法一般都是建立在生物智慧或物理現象基礎上的隨機搜尋演算法,目前在理論上還遠不如傳統優化演算法完善,往往也不能確保解的最優性,因而常常被視為只是一些“元啟發式方法”(meta-heuristic)。但從實際應用的觀點看,這類新演算法一般不要求目標函式和約束的連續性與凸性,甚至有時連有沒有解析表示式都不要求,對計算中資料的不確定性也有很強的適應能力。

下面給出一個區域性搜尋,模擬退火,遺傳演算法,禁忌搜尋的形象比喻:
  
  為了找出地球上最高的山,一群有志氣的兔子們開始想辦法。
   
  1.兔子朝著比現在高的地方跳去。他們找到了不遠處的最高山峰。但是這座山不一定是珠穆朗瑪峰。這就是區域性搜尋,它不能保證區域性最優值就是全域性最優值。
   
  2.兔子喝醉了。他隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,他漸漸清醒了並朝最高方向跳去。這就是模擬退火。

  3.兔子們吃了失憶藥片,並被髮射到太空,然後隨機落到了地球上的某些地方。他們不知道自己的使命是什麼。但是,如果你過幾年就殺死一部分海拔低的兔子,多產的兔子們自己就會找到珠穆朗瑪峰。這就是遺傳演算法。
   
  4.兔子們知道一個兔的力量是渺小的。他們互相轉告著,哪裡的山已經找過,並且找過的每一座山他們都留下一隻兔子做記號。他們制定了下一步去哪裡尋找的策略。這就是禁忌搜尋。

一般而言,區域性搜尋就是基於貪婪思想利用鄰域函式進行搜尋,若找到一個比現有值更優的解就棄前者而取後者。但是,它一般只可以得到“區域性極小解”,就是說,可能這隻兔子登“登泰山而小天下”,但是卻沒有找到珠穆朗瑪峰。而模擬退火,遺傳演算法,禁忌搜尋,神經網路等從不同的角度和策略實現了改進,取得較好的“全域性最小解”。
  
  模擬退火演算法(Simulated Annealing,SA)
  
  模擬退火演算法的依據是固體物質退火過程和組合優化問題之間的相似性。物質在加熱的時候,粒子間的布朗運動增強,到達一定強度後,固體物質轉化為液態,這個時候再進行退火,粒子熱運動減弱,並逐漸趨於有序,最後達到穩定。
  
  模擬退火的解不再像區域性搜尋那樣最後的結果依賴初始點。它引入了一個接受概率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)   then vc:=vn;
   else if random [0,1]    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)退火結束準則:一般有:設定終止溫度;設定迭代次數;搜尋到的最優值連續多次保持不變;檢驗系統熵是否穩定。
  
  為了保證有比較優的解,演算法往往採取慢降溫、多抽樣、以及把“終止溫度”設的比較低等方式,導致演算法執行時間比較長,這也是模擬退火的最大缺點。人喝醉了酒辦起事來都不利索,何況兔子?
  
  遺傳演算法(Genetic Algorithm, GA)
  
  “物競天擇,適者生存”,是進化論的基本思想。遺傳演算法就是模擬自然界想做的事。遺傳演算法可以很好地用於優化問題,若把它看作對自然過程高度理想化的模擬,更能顯出它本身的優雅——雖然生存競爭是殘酷的。
  
  遺傳演算法以一種群體中的所有個體為物件,並利用隨機化技術指導對一個被編碼的引數空間進行高效搜尋。其中,選擇、交叉和變異構成了遺傳演算法的遺傳操作;引數編碼、初始群體的設定、適應度函式的設計、遺傳操作設計、控制引數設定五個要素組成了遺傳演算法的核心內容。

  作為一種新的全域性優化搜尋演算法,遺傳演算法以其簡單通用、健壯性強、適於並行處理以及高效、實用等顯著特點,在各個領域得到了廣泛應用,取得了良好效果,並逐漸成為重要的智慧演算法之一。
   
  遺傳演算法的偽碼:
   
  procedure genetic algorithm
  begin
   initialize a group and evaluate the fitness value ; (1)
   while not convergent (2)
   begin
   select; (3)
   if random[0,1]
   crossover; (4)
   if random (0,1)
   mutation; (5)
   end;
  end
  上述程式中有五個重要的環節:
  (1)編碼和初始群體的生成:GA在進行搜尋之前先將解空間的解資料表示成遺傳空間的基因型串結構資料,這些串結構資料的不同組合便構成了不同的點。然後隨機產生N個初始串結構資料,每個串結構資料稱為一個個體, N個體構成了一個群體。GA以這N個串結構資料作為初始點開始迭代。
  
  比如,旅行商問題中,可以把商人走過的路徑進行編碼,也可以對整個圖矩陣進行編碼。編碼方式依賴於問題怎樣描述比較好解決。初始群體也應該選取適當,如果選取的過小則雜交優勢不明顯,演算法效能很差(數量上佔了優勢的老鼠進化能力比老虎強),群體選取太大則計算量太大。
  
  (2)檢查演算法收斂準則是否滿足,控制演算法是否結束。可以採用判斷與最優解的適配度或者定一個迭代次數來達到。
   
  (3)適應性值評估檢測和選擇:適應性函式表明個體或解的優劣性,在程式的開始也應該評價適應性,以便和以後的做比較。不同的問題,適應性函式的定義方式也不同。根據適應性的好壞,進行選擇。選擇的目的是為了從當前群體中選出優良的個體,使它們有機會作為父代為下一代繁殖子孫。遺傳演算法通過選擇過程體現這一思想,進行選擇的原則是適應性強的個體為下一代貢獻一個或多個後代的概率大。選擇實現了達爾文的適者生存原則。
   
  (4)雜交:按照雜交概率(pc)進行雜交。雜交操作是遺傳演算法中最主要的遺傳操作。通過雜交操作可以得到新一代個體,新個體組合了其父輩個體的特性。雜交體現了資訊交換的思想。
   
  可以選定一個點對染色體串進行互換,插入,逆序等雜交,也可以隨機選取幾個點雜交。雜交概率如果太大,種群更新快,但是高適應性的個體很容易被淹沒,概率小了搜尋會停滯。
   
  (5)變異:按照變異概率(pm)進行變異。變異首先在群體中隨機選擇一個個體,對於選中的個體以一定的概率隨機地改變串結構資料中某個串的值。同生物界一樣,GA中變異發生的概率很低。變異為新個體的產生提供了機會。
   
  變異可以防止有效基因的缺損造成的進化停滯。比較低的變異概率就已經可以讓基因不斷變更,太大了會陷入隨機搜尋。想一下,生物界每一代都和上一代差距很大,會是怎樣的可怕情形。
  
  就像自然界的變異適和任何物種一樣,對變數進行了編碼的遺傳演算法沒有考慮函式本身是否可導,是否連續等性質,所以適用性很強;並且,它開始就對一個種群進行操作,隱含了並行性,也容易找到“全域性最優解”。
  
  禁忌搜尋演算法(Tabu Search,TS)
   
  為了找到“全域性最優解”,就不應該執著於某一個特定的區域。區域性搜尋的缺點就是太貪婪地對某一個區域性區域以及其鄰域搜尋,導致一葉障目,不見泰山。禁忌搜尋就是對於找到的一部分區域性最優解,有意識地避開它(但不是完全隔絕),從而獲得更多的搜尋區間。兔子們找到了泰山,它們之中的一隻就會留守在這裡,其他的再去別的地方尋找。就這樣,一大圈後,把找到的幾個山峰一比較,珠穆朗瑪峰脫穎而出。  
  
  當兔子們再尋找的時候,一般地會有意識地避開泰山,因為他們知道,這裡已經找過,並且有一隻兔子在那裡看著了。這就是禁忌搜尋中“禁忌表(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網路只能把一個平面分成個半平面,卻不能夠選取特定的一部分。而解決的辦法就是“多層前向網路”。
  
  圖2是多層前向網路的示意圖。最下面的稱作輸入層,最上面一層稱作輸出層,任何一箇中間層都接受來自前一層的所有輸入,加工後傳入後一層。每一層的神經元之間沒有聯絡,輸入輸出層之間也沒有直接聯絡,並且僅僅是單向聯絡,沒有反饋。這樣的網路被稱作“多層前向網路”。資料在輸入後,經過每一層的加權,最後輸出結果。
   
  如圖3,用可覆蓋面來說明多層網路的功能:單層網路只能把平面分成兩部分,雙層網路就可以分割任意凸域,多層網路則可以分割任意區域。
  為了讓這種網路有合適的權值,必須給網路一定的激勵,讓它自己學習,調整。一種方法稱作“向後傳播演算法(Back Propagation,BP)”,其基本思想是考察最後輸出解和理想解的差異,調整權值,並把這種調整從輸出層開始向後推演,經過中間層,達到輸入層。
  
  可見,神經網路是通過學習來達到解決問題的目的,學習沒有改變單個神經元的結構和工作方式,單個神經元的特性和要解決的問題之間也沒有直接聯絡,這裡學習的作用是根據神經元之間激勵與抑制的關係,改變它們的作用強度。學習樣本中的任何樣品的資訊都包含在網路的每個權值之中。
   
  BP演算法中有考察輸出解和理想解差異的過程,假設差距為w,則調整權值的目的就是為了使得w最小化。這就又包含了前文所說的“最小值”問題。一般的BP演算法採用的是區域性搜尋,比如最速下降法,牛頓法等,當然如果想要得到全域性最優解,可以採用模擬退火,遺傳演算法等。當前向網路採用模擬退火演算法作為學習方法的時候,一般成為“波爾茲曼網路”,屬於隨機性神經網路。
   
  在學習BP演算法學習的過程中,需要已經有一部分確定的值作為理想輸出,這就好像中學生在學習的時候,有老師的監督。如果沒有了監督,人工神經網路該怎麼學習?
   
  就像沒有了巨集觀調控,自由的市場引入了競爭一樣,有一種學習方法稱作“無監督有競爭的學習”。在輸入神經元i的若干個神經元之間開展競爭,競爭之後,只有一個神經元為1,其他均為0,而對於失敗的神經元,調整使得向對競爭有利的方向移動,則最終也可能在一次競爭中勝利;  
  
  人工神經網路還有反饋網路如Hopfield網路,它的神經元的訊號傳遞方向是雙向的,並且引入一個能量函式,通過神經元之間不斷地相互影響,能量函式值不斷下降,最後能給出一個能量比較低的解。這個思想和模擬退火差不多。
   
  人工神經網路應用到演算法上時,其正確率和速度與軟體的實現聯絡不大,關鍵的是它自身的不斷學習。這種思想已經和馮·諾依曼模型很不一樣。

由於人工神經網路中神經元個數眾多以及整個網路儲存資訊容量的巨大,使得它具有很強的不確定性資訊處理能力。即使輸入資訊不完全、不準確或模糊不清,神經網路仍然能夠聯想思維存在於記憶中的事物的完整圖象。只要輸入的模式接近於訓練樣本,系統就能給出正確的推理結論。

   
  總結

  模擬退火,遺傳演算法,禁忌搜尋,神經網路在解決全域性最優解的問題上有著獨到的優點,並且,它們有一個共同的特點:都是模擬了自然過程。模擬退火思路源於物理學中固體物質的退火過程,遺傳演算法借鑑了自然界優勝劣汰的進化思想,禁忌搜尋模擬了人類有記憶過程的智力過程,神經網路更是直接模擬了人腦。
   
  它們之間的聯絡也非常緊密,比如模擬退火和遺傳演算法為神經網路提供更優良的學習演算法提供了思路。把它們有機地綜合在一起,取長補短,效能將更加優良。
  
  這幾種智慧演算法有別於一般的按照圖靈機進行精確計算的程式,尤其是人工神經網路,是對計算機模型的一種新的詮釋,跳出了馮·諾依曼機的圈子,按照這種思想來設計的計算機有著廣闊的發展前景