智慧機器人以及智慧控制演算法綜述小論文

hacker_crazy發表於2014-09-22


 

一、遺傳演算法

1.介紹:遺傳演算法(Genetic Algorithm, GA)是近幾年發展起來的一種嶄新的全域性優化演算法。1962 年霍蘭德 (Holland) 教授首次提出了 GA 演算法的思想,它借用了模擬生物遺傳學和自然選擇機理,通過自然選擇、遺傳、變異等作用機制,實現各個個體的適應性的提高。從某種程度上說遺傳演算法是對生物進化過程進行的數學方式模擬

2.演算法操作:

a.選擇:選擇是另一種意義上的複製,從群體中按照個體的適應度函式選擇出比較適應環境的個體。最常用的實現方法是轉盤法,令令Σ fi 表示群體的適應度值之總和,fi 表示種群中第 個染色體的適應度值,它被選擇的概率正好為其適應度值所佔份額 fi /Σ fi

b.交叉:交叉運算元將被選中的兩個個體的基因鏈按一定概率 pc 進行交叉,從而生成兩個新的個體,交叉位置 pc 是隨機的。其中 Pc 是一個系統引數。根據問題的不同,交叉又為了單點交叉運算元(Single Point Crossover)、雙點交叉運算元(Two Point Crossover)、均勻交叉運算元 (Uniform Crossover),在此我們只討論單點交叉的情況。

c.變異:這是在選中的個體中,將新個體的基因鏈的各位按概率 pm 進行異向轉化,最簡單方式是改變串上某個位置數值。對二進位制編碼來說將 與 互換:變異為 1變異為 0

d.精英主義:僅僅從產生的子代中選擇基因去構造新的種群可能會丟失掉上一代種群中的很多資訊。也就是說當利用交叉和變異產生新的一代時,我們有很大的可能把在某個中間步驟中得到的最優解丟失。在此我們使用精英主義(Elitism)方法,在每一次產生新的一代時,我們首先把當前最優解原封不動的複製到新的一代中,其他步驟不變。這樣任何時刻產生的一個最優解都可以存活到遺傳演算法結束。

3.遺傳步驟:對待解決問題進行編碼 我們將問題結構變換為位串形式編碼表示的過程叫編碼;而相反將位串形式編碼表示變換為原問題結構的過程叫譯碼。

隨機初始化群體 P(0)=(p1, p2, … pn)

計算群體上每個個體的適應度值 (Fitness)

評估適應度 對當前群體 P(t) 中每個個體 Pi 計算其適應度 F(Pi),適應度表示了該個體的效能好壞

按由個體適應度值所決定的某個規則應用選擇運算元產生中間代 Pr(t)

依照 Pc 選擇個體進行交叉操作

仿照 Pm 對繁殖個體進行變異操作

沒有滿足某種停止條件,則轉第 步,否則進入 9

輸出種群中適應度值最優的個體

程式的停止條件最簡單的有如下二種:完成了預先給定的進化代數則停止;種群中的最優個體在連續若干代沒有改進或平均適應度在連續若干代基本沒有改進時停止。

簡單遺傳演算法框圖

二、蟻群演算法:

1.介紹:蟻群演算法(ant colony optimization, ACO),又稱螞蟻演算法,是一種用來在圖中尋找優化路徑的機率型演算法。它由Marco Dorigo1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行為。蟻群演算法是一種模擬進化演算法,初步的研究表明該演算法具有許多優良的性質。針對PID控制器引數優化設計問題(這個不懂),將蟻群演算法設計的結果與遺傳演算法設計的結果進行了比較,數值模擬結果表明,蟻群演算法具有一種新的模擬進化優化方法的有效性和應用價值。

2.原理:設想,如果我們要為螞蟻設計一個工智慧的程式,那麼這個程式要多麼複雜呢?首先,你要讓螞蟻能夠避開障礙物,就必須根據適當的地形給它編進指令讓他們能夠巧妙的避開障礙物,其次,要讓螞蟻找到食物,就需要讓他們遍歷空間上的所有點;再次,如果要讓螞蟻找到最短的路徑,那麼需要計算所有可能的路徑並且比較它們的大小,而且更重要的是,你要小心翼翼的程式設計,因為程式的錯誤也許會讓你前功盡棄。這是多麼不可思議的程式!太複雜了,恐怕沒人能夠完成這樣繁瑣冗餘的程式。

然而,事實並沒有你想得那麼複雜,上面這個程式每個螞蟻的核心程式編碼不過100多行!為什麼這麼簡單的程式會讓螞蟻幹這樣複雜的事情?答案是:簡單規則的湧現。事實上,每隻螞蟻並不是像我們想象的需要知道整個世界的資訊,他們其實只關心很小範圍內的眼前資訊,而且根據這些區域性資訊利用幾條簡單的規則進行決策,這樣,在蟻群這個集體裡,複雜性的行為就會凸現出來。

3.規則:下面就是實現如此複雜性的七條簡單規則:

1、範圍:

螞蟻觀察到的範圍是一個方格世界,螞蟻有一個引數為速度半徑(一般是3),那麼它能觀察到的範圍就是3*3個方格世界,並且能移動的距離也在這個範圍之內。

2、環境:

螞蟻所在的環境是一個虛擬的世界,其中有障礙物,有別的螞蟻,還有資訊素,資訊素有兩種,一種是找到食物的螞蟻灑下的食物資訊素,一種是找到窩的螞蟻灑下的窩的資訊素。每個螞蟻都僅僅能感知它範圍內的環境資訊。環境以一定的速率讓資訊素消失。

3、覓食規則:

在每隻螞蟻能感知的範圍內尋找是否有食物,如果有就直接過去。否則看是否有資訊素,並且比較在能感知的範圍內哪一點的資訊素最多,這樣,它就朝資訊素多的地方走,並且每隻螞蟻多會以小概率犯錯誤,從而並不是往資訊素最多的點移動。螞蟻找窩的規則和上面一樣,只不過它對窩的資訊素做出反應,而對食物資訊素沒反應。

4、移動規則:

每隻螞蟻都朝向資訊素最多的方向移,並且,當週圍沒有資訊素指引的時候,螞蟻會按照自己原來運動的方向慣性的運動下去,並且,在運動的方向有一個隨機的小的擾動。為了防止螞蟻原地轉圈,它會記住最近剛走過了哪些點,如果發現要走的下一點已經在最近走過了,它就會盡量避開。

5、避障規則:

如果螞蟻要移動的方向有障礙物擋住,它會隨機的選擇另一個方向,並且有資訊素指引的話,它會按照覓食的規則行為。

7、播撒資訊素規則:

每隻螞蟻在剛找到食物或者窩的時候撒發的資訊素最多,並隨著它走遠的距離,播撒的資訊素越來越少。

下面的程式開始執行之後,螞蟻們開始從窩裡出動了,尋找食物;他們會順著螢幕爬滿整個畫面,直到找到食物再返回窩。

其中,‘F’點表示食物,‘H’表示窩,白色塊表示障礙物,‘+’就是螞蟻了。

引數說明:

最大資訊素:螞蟻在一開始擁有的資訊素總量,越大表示程式在較長一段時間能夠存在資訊素。資訊素消減的速度:隨著時間的流逝,已經存在於世界上的資訊素會消減,這個數值越大,那麼消減的越快。

錯誤概率表示這個螞蟻不往資訊素最大的區域走的概率,越大則表示這個螞蟻越有創新性。

速度半徑表示螞蟻一次能走的最大長度,也表示這個螞蟻的感知範圍。

記憶能力表示螞蟻能記住多少個剛剛走過點的座標,這個值避免了螞蟻在本地打轉,停滯不前。而這個值越大那麼整個系統執行速度就慢,越小則螞蟻越容易原地轉圈。

三、禁忌搜尋:

1.介紹:禁忌搜尋(Tabu SearchTaboo Search,簡稱TS)的思想最早由Glover(1986)提出,它是對區域性領域搜尋的一種擴充套件,是一種全域性逐步尋優演算法,是對人類智力過程的一種模擬。TS演算法通過引入一個靈活的儲存結構和相應的禁忌準則來避免迂迴搜尋,並通過藐視準則來赦免一些被禁忌的優良狀態,進而保證多樣化的有效探索以最終實現全域性優化。相對於模擬退火遺傳演算法TS是又一種搜尋特點不同的 meta-heuristic演算法。

2.區域性領域搜尋:區域性領域搜尋是基於貪婪思想持續地在當前解的領域中進行搜尋,雖然演算法通用易實現,且容易理解,但其搜尋效能完全依賴於領域結構和初解,尤其窺陷入區域性極小而無法保證全域性優化性。針對區域性領域搜尋,為了實現全域性優化,可嘗試的途徑有:以可控性概率接受劣解來逃逸區域性極小,如模擬退火演算法;擴大領域搜尋結構,如TSP2opt擴充套件到k-opt;多點並行搜尋,如進化計算;變結構領域搜尋( Mladenovic et al,1997);另外,就是採用TS的禁忌策略儘量避免迂迴搜尋,它是一種確定性的區域性極小突跳策略。

禁忌搜尋是人工智慧的一種體現,是區域性領域搜尋的一種擴充套件。禁忌搜尋最重要的思想是標記對應已搜尋的區域性最優解的一些物件,並在進一步的迭代搜尋中儘量避開這些物件(而不是絕對禁止迴圈),從而保證對不同的有效搜尋途徑的探索。禁忌搜尋涉及到臨域(neighborhood)、禁忌表(tabu list)、禁忌長度(tabu length)、候選解(candidate)、藐視準則(aspiration criterion)等概念;

3.禁域搜尋例項:組合優化是TS演算法應用最多的領域。置換問題,如TSP、排程問題等,是一大批組合優化問題的典型代表,在此用它來解釋簡單的禁忌搜尋演算法的思想和操作。對於 n元素的置換問題,其所有排列狀態數為n!,當n較大時搜尋空間的大小將是天文數字,而禁忌搜尋則希望僅通過探索少數解來得到滿意的優化解。

首先,我們對置換問題定義一種鄰域搜尋結構,如互換操作(SWAP),即隨機交換兩個點的位置,則每個狀態的鄰域解有Cn2=nn1/2個。稱從一個狀態轉移到其鄰域中的另一個狀態為一次移動(move),顯然每次移動將導致適配值(反比於目標函式值)的變化。其次,我們採用一個儲存結構來區分移動的屬性,即是否為禁忌“物件”在以下示例中:考慮7元素的置換問題,並用每一狀態的相應21個鄰域解中最優的5次移動(對應最佳的5個適配值)作為候選解;為一定程度上防止迂迴搜尋,每個被採納的移動在禁忌表中將滯留3步(即禁忌長度),即將移動在以下連續3步搜尋中將被視為禁忌物件;需要指出的是,由於當前的禁忌物件對應狀態的適配值可能很好,因此在演算法中設定判斷,若禁忌物件對應的適配值優於“ best so far”狀態,則無視其禁忌屬性而仍採納其為當前選擇,也就是通常所說的藐視準則(或稱特赦準則)。

可見,簡單的禁忌搜尋是在領域搜尋的基礎上,通過設定禁忌表來禁忌一些已經歷的操作,並利用藐視準則來獎勵一些優良狀態,其中領域結構、候選解、禁忌長度、禁忌物件、藐視準則、終止準則等是影響禁忌搜尋演算法效能的關鍵。需要指出的是:

1)首先,由於TS是區域性領域搜尋的一種擴充,因此領域結構的設計很關鍵,它決定了當前解的領域解的產生形式和數目,以及各個解之間的關係。

2)其次,出於改善演算法的優化時間效能的考慮,若領域結構決定了大量的領域解(尤其對大規模問題,如TSPSWAP操作將產生Cn2個領域解),則可以僅嘗試部分互換的結果,而候選解也僅取其中的少量最佳狀態。

3)禁忌長度是一個很重要的關鍵引數,它決定禁忌物件的任期,其大小直接進而影響整個演算法的搜尋程式和行為。同時,以上示例中,禁忌表中禁忌物件的替換是採用FIFO方式(不考慮藐視準則的作用),當然也可以採用其他方式,甚至是動態自適應的方式。

4)藐視準則的設定是演算法避免遺失優良狀態,激勵對優良狀態的區域性搜尋,進而實現全域性優化的關鍵步驟。

5)對於非禁忌候選狀態,演算法無視它與當前狀態的適配值的優劣關係,僅考慮它們中間的最佳狀態為下一步決策,如此可實現對區域性極小的突跳(是一種確定性策略)。

6)為了使演算法具有優良的優化效能或時間效能,必須設定一個合理的終止準則來結束整個搜尋過程。

此外,在許多場合禁忌物件的被禁次數(frequency)也被用於指導搜尋,以取得更大的搜尋空間。禁忌次數越高,通常可認為出現迴圈搜尋的概率越大。

四、模擬退火:

1.介紹:模擬退火(Simulated Annealing,簡稱SA)是一種通用概率演算法,用來在一個大的搜尋空間內找尋命題的最優解。

2.原理:模擬退火演算法來源於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻。加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。

根據Metropolis準則,粒子在溫度T時趨於平衡的概率為e-ΔE/(kT),其中E為溫度T時的內能,ΔE為其改變數,kBoltzmann常數。用固體退火模擬組合優化問題,將內能E模擬為目標函式值f,溫度T演化成控制引數t,即得到解組合優化問題的模擬退火演算法:由初始解x和控制引數初值t開始,對當前解重複“產生新解→計算目標函式差→ 接受或捨棄”的迭代,並逐步衰減t值,演算法終止時的當前解即為所得近似最優解,這是基於蒙特卡羅迭代求解法的一種啟發式隨機搜尋過程。退火過程由冷卻進度表(Cooling Schedule)控制,包括控制引數的初值t及其衰減因子Δt、每個t值時的迭代次數L和停止條件S

3.步驟:

第一步是由一個產生函式從當前解產生一個位於解空間的新解;為便於後續的計算和接受,減少演算法耗時,通常選擇由當前新解經過簡單地變換即可產生新解的方法,如對構成新解的全部或部分元素進行置換、互換等,注意到產生新解的變換方法決定了當前新解的鄰域結構,因而對冷卻進度表的選取有一定的影響。

第二步是計算與新解所對應的目標函式差。因為目標函式差僅由變換部分產生,所以目標函式差的計算最好按增量計算。事實表明,對大多數應用而言,這是計算目標函式差的最快方法。

第三步是判斷新解是否被接受,判斷的依據是一個接受準則,最常用的接受準則是Metropo1is準則:若Δt<0則接受S′作為新的當前解S,否則以概率exp(-Δt/T)接受S′作為新的當前解S

第四步是當新解被確定接受時,用新解代替當前解,這隻需將當前解中對應於產生新解時的變換部分予以實現,同時修正目標函式值即可。此時,當前解實現了一次迭代。可在此基礎上開始下一輪試驗。而當新解被判定為捨棄時,則在原當前解的基礎上繼續下一輪試驗。

模擬退火演算法與初始值無關,演算法求得的解與初始解狀態S(是演算法迭代的起點)無關;模擬退火演算法具有漸近收斂性,已在理論上被證明是一種以概率l收斂於全域性最優解的全域性優化演算法;模擬退火演算法具有並行性。

(隨機)選擇一個x的初始值,以及一個T的初始值T>0,當T>Tmin,執行以下步驟

1)產生一個x的鄰近點y(鄰近點的確切定義接下來討論)。

2)如果H(y)3)否則計算Py=exp(-(H(y)-H(x))/T)。如果Py>=R,那麼用y代替x,其中R是在01之間均勻分佈的隨機數。

4)略微降低T的值,返回第1步。

五、貪心演算法:

1.介紹:貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。

2.原理:

1貪心選擇性質

所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。這是貪心演算法可行的第一個基本要素,也是貪心演算法與動態規劃演算法的主要區別。動態規劃演算法通常以自底向上的方式解各子問題,而貪心演算法則通常以自頂向下的方式進行,以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化為規模更小的子問題。對於一個具體問題,要確定它是否具有貪心選擇性質,必須證明每一步所作的貪心選擇最終導致問題的整體最優解。

2最優子結構性質

當一個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。問題的最優子結構性質是該問題可用動態規劃演算法或貪心演算法求解的關鍵特徵。

貪心演算法當然也有正確的時候。求最小生成樹的Prim演算法Kruskal演算法都是漂亮的貪心演算法。

貪心法的應用演算法有Dijkstra的單源最短路徑和Chvatal的貪心集合覆蓋啟發式

所以需要說明的是,貪心演算法可以與隨機化演算法一起使用,具體的例子就不再多舉了。(因為這一類演算法普及性不高,而且技術含量是非常高的,需要通過一些反例確定隨機的物件是什麼,隨機程度如何,但也是不能保證完全正確,只能是極大的機率正確)

 

PS:還有很多演算法:搜尋演算法、動態規劃演算法等。而且這些演算法我本人也不是很好的理解,因為並沒有去實現或者閱讀演算法的程式碼本身,只是看了一些他們的介紹。其實對於人工智慧也好,智慧機器人也好,原先認為以現在的硬體條件和二進位制的方式是沒法實現的,比如我一直對於“靈感”的實現表示懷疑。如何產生一個隨機的意識的問題,看了上面的演算法,比如遺傳演算法和蟻群演算法,感覺或許可以通過一種模擬的方式來實現?由於才疏學淺,目前還不是很瞭解,希望將來有機會多去了解一些吧。

 

相關文章