遺傳演算法二進制編譯方法
㈠ 遺傳演算法在求解TSP問題中是如何編碼解碼的 二進制如何編碼 如何求解
路徑表示是按照城市的訪問順序排列的一種編碼方式,是最自然、簡單和符合邏輯的表示方法。然而,除非初始基因是固定的,否則這種編碼方式不具備唯一性。例如,旅程(5-1-7-8-9-4-6-2-3)與(1-7-8-9-4-6-2-3-5)表示的是同一條旅程,因為路徑表示法是遍歷了每一個節點,所以不會產生子迴路。
考慮到此次研究對象的初始基因是固定的,不會出現漏選,所以運用這種編碼方法。
初始種群可以隨機產生,也可以通過某種演算法生成,但需要保證群體的多樣性。在種群初始化時,需要可慮以下幾個方面的因素:
1、根據問題固有的知識,設法把握最優解所佔的空間在整個問題空間中的分布范圍,然後,在次分布范圍內設定初始群體。
2、隨機生成一定數目的個體,然後從中挑選出最好的個體加入群體。這一過程不斷進行迭代,直到初始種群中個體數達到了預先確定的規模。
親和度設置為1/f f為總路徑長度
此後根據城市序號在進行選擇,交叉,變異即可
㈡ 遺傳演算法的二進制編碼
請問你這個問題解決了么?我現在遇到同樣的問題,請問你是怎麼處理的?
㈢ 遺傳演算法的編碼方式誰能詳細介紹下謝謝
假如你想要編碼為x,設x的范圍是,二進制編碼長度為10,那二進解碼方式是:x*(max-min)/1023,這個不用開始編碼,開始你可以用rand(n,10)產生n個樣本的隨機數,然後優化即可。
不是能把「數學模型中的目標函數和每一條約束函數分別編程Matlab里的M文件」,是你用遺傳演算法就必須要編進去,電腦怎麼知道往哪個方向優化是好的,要不把你郵箱留下,我給你發個尋求最大值的遺傳演算法。
㈣ 遺傳演算法的編碼方法有幾種
常用的編碼介紹
1、二進制編碼:
(1)定義:二進制編碼方法是使用二值符號集{0,1},它所構成的個體基因型是一個二進制編碼符號串。二進制編碼符號串的長度與問題所要求的求解精度有關。
(2)舉例:0≤x≤1023,精度為1,m表示二進制編碼的長度。則有建議性說法:使
2m-1≤1000(跟精度有關)≤2m-1。取m=10
則X:0010101111就可以表示一個個體,它所對應的問題空間的值是x=175。
(3)優缺點
優點:符合最小字元集原則,便於用模式定理分析;
缺點:連續函數離散化時的映射誤差。
2、格雷碼編碼
(1)定義:格雷碼編碼是其連續的兩個整數所對應的編碼之間只有一個碼位是不同的,其餘碼位完全相同。它是二進制編碼方法的一種變形。
十進制數0—15之間的二進制碼和相應的格雷碼分別編碼如下。
二進制編碼為:0000,0001,0010,001
1,0100。0101,0110,0111,
1000,1001,1010,1011,1100,1101,1110,1111;
格雷碼編碼為:0000,0001,0011,0010,0110,0111,0101,0100,
1100,1101,1111,1110,1010,1011,1001,1000。
(2)舉例:對於區間[0。1023]中兩個鄰近的整數X1=175和X2=176,若用長度為10位的二進制編碼,可表示為X11:0010101111和X12
0010110000,而使用同樣長度的格雷碼,它們可分別表示為X21:0010101111和X22:0010101000。
(3)優點:增強了遺傳演算法的局部搜索能力,便於連續函數的局部控制項搜索。
3、浮點數(實數)編碼
(1)定義:浮點數編碼是指個體的每個基因值用某一范圍內的一個浮點數來表示,而個體的編碼長度等於其決策變數的個數。因為這種編碼方法使用的決策變數的真實值,也稱之為真值編碼方法。
(2)舉例:
(3)優點:實數編碼是遺傳演算法中在解決連續參數優化問題時普遍使用的一種編碼方式,具有較高的精度,在表示連續漸變問題方面具有優勢。
4、排列編碼
排列編碼也叫序列編碼,是針對一些特殊問題的特定編碼方式。排序編碼使問題簡潔,易於理解。該編碼方式將有限集合內的元素進行排列。若集合內包含m個元素,則存在m!種排列方法,當m不大時,m!也不會太大,窮舉法就可以解決問題。當m比較大時,m!就會變得非常大,窮舉法失效,遺傳演算法在解決這類問題上具有優勢。如解決TSP問題時,用排列編碼自然、合理。
5、其它編碼方式
多參數級聯編碼等
㈤ 在遺傳演算法中什麼是二進制錦標賽法
錦標賽法是選擇操作的一種方法。
假設種群規模為n,該法的步驟為:
1.隨機產生n個個體作為第一代(其實這步准確的說不是屬於選擇操作的,但每個運算元並沒有絕對的界限,這個是在選擇操作之前的必做之事)
2.從這n個個體中隨機(注意是隨機)選擇k(k<n)個個體,k的取值小,效率就高(節省運行時間),但不宜太小,一般取為n/2(取整)
3.從這k個個體中選擇最大的一個個體(涉及到排序的方法),作為下一代n個個體中的一個個體
4.重復2-4步,至得到新的n個個體
5.進行這新的n個個體之間的交叉操作
不論是二進制還是十進制,方法都是一樣的
㈥ 遺傳演算法的核心是什麼!
遺傳操作的交叉運算元。
在自然界生物進化過程中起核心作用的是生物遺傳基因的重組(加上變異)。同樣,遺傳演算法中起核心作用的是遺傳操作的交叉運算元。所謂交叉是指把兩個父代個體的部分結構加以替換重組而生成新個體的操作。通過交叉,遺傳演算法的搜索能力得以飛躍提高。
交叉運算元根據交叉率將種群中的兩個個體隨機地交換某些基因,能夠產生新的基因組合,期望將有益基因組合在一起。
(6)遺傳演算法二進制編譯方法擴展閱讀
評估編碼策略常採用以下3個規范:
a)完備性(completeness):問題空間中的所有點(候選解)都能作為GA空間中的點(染色體)表現。
b)健全性(soundness): GA空間中的染色體能對應所有問題空間中的候選解。
c)非冗餘性(nonrendancy):染色體和候選解一一對應。
目前的幾種常用的編碼技術有二進制編碼,浮點數編碼,字元編碼,變成編碼等。
而二進制編碼是目前遺傳演算法中最常用的編碼方法。即是由二進制字元集{0,1}產生通常的0,1字元串來表示問題空間的候選解。
㈦ 遺傳演算法二進制編碼問題:二進制編碼的位數是如何確定的
用這個公式試試,這個是解碼用的,至於你說的位數,可以給你舉個例子,比如[0,1],精度千分之1,就是相當於裡面離散化出來1000+1個點,2的10次方是1024,2的9次方是512,這時候你就只要取10位就可以把這1001個點的變化全部包含到二進制裡面了
㈧ 遺傳演算法的基本原理
遺傳演算法的基本原理和方法
一、編碼
編碼:把一個問題的可行解從其解空間轉換到遺傳演算法的搜索空間的轉換方法。
解碼(解碼):遺傳演算法解空間向問題空間的轉換。
二進制編碼的缺點是漢明懸崖(Hamming Cliff),就是在某些相鄰整數的二進制代碼之間有很大的漢明距離,使得遺傳演算法的交叉和突變都難以跨越。
格雷碼(Gray Code):在相鄰整數之間漢明距離都為1。
(較好)有意義的積木塊編碼規則:所定編碼應當易於生成與所求問題相關的短距和低階的積木塊;最小字元集編碼規則,所定編碼應採用最小字元集以使問題得到自然的表示或描述。
二進制編碼比十進制編碼搜索能力強,但不能保持群體穩定性。
動態參數編碼(Dynamic Paremeter Coding):為了得到很高的精度,讓遺傳演算法從很粗糙的精度開始收斂,當遺傳演算法找到一個區域後,就將搜索現在在這個區域,重新編碼,重新啟動,重復這一過程,直到達到要求的精度為止。
編碼方法:
1、 二進制編碼方法
缺點:存在著連續函數離散化時的映射誤差。不能直接反映出所求問題的本身結構特徵,不便於開發針對問題的專門知識的遺傳運算運算元,很難滿足積木塊編碼原則
2、 格雷碼編碼:連續的兩個整數所對應的編碼之間僅僅只有一個碼位是不同的,其餘碼位都相同。
3、 浮點數編碼方法:個體的每個基因值用某一范圍內的某個浮點數來表示,個體的編碼長度等於其決策變數的位數。
4、 各參數級聯編碼:對含有多個變數的個體進行編碼的方法。通常將各個參數分別以某種編碼方法進行編碼,然後再將他們的編碼按照一定順序連接在一起就組成了表示全部參數的個體編碼。
5、 多參數交叉編碼:將各個參數中起主要作用的碼位集中在一起,這樣它們就不易於被遺傳運算元破壞掉。
評估編碼的三個規范:完備性、健全性、非冗餘性。
二、選擇
遺傳演算法中的選擇操作就是用來確定如何從父代群體中按某種方法選取那些個體遺傳到下一代群體中的一種遺傳運算,用來確定重組或交叉個體,以及被選個體將產生多少個子代個體。
常用的選擇運算元:
1、 輪盤賭選擇(Roulette Wheel Selection):是一種回放式隨機采樣方法。每個個體進入下一代的概率等於它的適應度值與整個種群中個體適應度值和的比例。選擇誤差較大。
2、 隨機競爭選擇(Stochastic Tournament):每次按輪盤賭選擇一對個體,然後讓這兩個個體進行競爭,適應度高的被選中,如此反復,直到選滿為止。
3、 最佳保留選擇:首先按輪盤賭選擇方法執行遺傳演算法的選擇操作,然後將當前群體中適應度最高的個體結構完整地復制到下一代群體中。
4、 無回放隨機選擇(也叫期望值選擇Excepted Value Selection):根據每個個體在下一代群體中的生存期望來進行隨機選擇運算。方法如下
(1) 計算群體中每個個體在下一代群體中的生存期望數目N。
(2) 若某一個體被選中參與交叉運算,則它在下一代中的生存期望數目減去0.5,若某一個體未被選中參與交叉運算,則它在下一代中的生存期望數目減去1.0。
(3) 隨著選擇過程的進行,若某一個體的生存期望數目小於0時,則該個體就不再有機會被選中。
5、 確定式選擇:按照一種確定的方式來進行選擇操作。具體操作過程如下:
(1) 計算群體中各個個體在下一代群體中的期望生存數目N。
(2) 用N的整數部分確定各個對應個體在下一代群體中的生存數目。
(3) 用N的小數部分對個體進行降序排列,順序取前M個個體加入到下一代群體中。至此可完全確定出下一代群體中M個個體。
6、無回放余數隨機選擇:可確保適應度比平均適應度大的一些個體能夠被遺傳到下一代群體中,因而選擇誤差比較小。
7、均勻排序:對群體中的所有個體按期適應度大小進行排序,基於這個排序來分配各個個體被選中的概率。
8、最佳保存策略:當前群體中適應度最高的個體不參與交叉運算和變異運算,而是用它來代替掉本代群體中經過交叉、變異等操作後所產生的適應度最低的個體。
9、隨機聯賽選擇:每次選取幾個個體中適應度最高的一個個體遺傳到下一代群體中。
10、排擠選擇:新生成的子代將代替或排擠相似的舊父代個體,提高群體的多樣性。
三、交叉
遺傳演算法的交叉操作,是指對兩個相互配對的染色體按某種方式相互交換其部分基因,從而形成兩個新的個體。
適用於二進制編碼個體或浮點數編碼個體的交叉運算元:
1、單點交叉(One-pointCrossover):指在個體編碼串中只隨機設置一個交叉點,然後再該點相互交換兩個配對個體的部分染色體。
2、兩點交叉與多點交叉:
(1) 兩點交叉(Two-pointCrossover):在個體編碼串中隨機設置了兩個交叉點,然後再進行部分基因交換。
(2) 多點交叉(Multi-pointCrossover)
3、均勻交叉(也稱一致交叉,UniformCrossover):兩個配對個體的每個基因座上的基因都以相同的交叉概率進行交換,從而形成兩個新個體。
4、算術交叉(ArithmeticCrossover):由兩個個體的線性組合而產生出兩個新的個體。該操作對象一般是由浮點數編碼表示的個體。
四、變異
遺傳演算法中的變異運算,是指將個體染色體編碼串中的某些基因座上的基因值用該基因座上的其它等位基因來替換,從而形成以給新的個體。
以下變異運算元適用於二進制編碼和浮點數編碼的個體:
1、基本位變異(SimpleMutation):對個體編碼串中以變異概率、隨機指定的某一位或某幾位僅因座上的值做變異運算。
2、均勻變異(UniformMutation):分別用符合某一范圍內均勻分布的隨機數,以某一較小的概率來替換個體編碼串中各個基因座上的原有基因值。(特別適用於在演算法的初級運行階段)
3、邊界變異(BoundaryMutation):隨機的取基因座上的兩個對應邊界基因值之一去替代原有基因值。特別適用於最優點位於或接近於可行解的邊界時的一類問題。
4、非均勻變異:對原有的基因值做一隨機擾動,以擾動後的結果作為變異後的新基因值。對每個基因座都以相同的概率進行變異運算之後,相當於整個解向量在解空間中作了一次輕微的變動。
5、高斯近似變異:進行變異操作時用符號均值為P的平均值,方差為P2的正態分布的一個隨機數來替換原有的基因值。
㈨ MATLAB中遺傳演算法編程中,二進制編碼如何處理實數變數
假如你想要編碼為x,設x的范圍是【min,max】,二進制編碼長度為10,那二進解碼方式是:x*(max-min)/1023,這個不用開始編碼,開始你可以用rand(n,10)產生n個樣本的隨機數,然後優化即可。
不是能把「數學模型中的目標函數和每一條約束函數分別編程Matlab里的M文件」,是你用遺傳演算法就必須要編進去,電腦怎麼知道往哪個方向優化是好的,要不把你郵箱留下,我給你發個尋求最大值的遺傳演算法。