最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【路徑規(guī)劃】基于遺傳算法實現(xiàn)物流中心配送方案matlab源碼

2022-04-03 11:55 作者:Matlab工程師  | 我要投稿

定義

遺傳算法(Genetic Algorithm, GA)起源于對生物系統(tǒng)所進行的計算機模擬研究。它是模仿自然界生物進化機制發(fā)展起來的隨機全局搜索和優(yōu)化方法,借鑒了達爾文的進化論和孟德爾的遺傳學說。其本質是一種高效、并行、全局搜索的方法,能在搜索過程中自動獲取和積累有關搜索空間的知識,并自適應地控制搜索過程以求得最佳解。

相關術語


  1. 基因型(genotype):性狀染色體的內部表現(xiàn)。


  2. 表現(xiàn)型(phenotype):染色體決定的性狀的外部表現(xiàn),或者說,根據(jù)基因型形成的個體的外部表現(xiàn)。


  3. 進化(evolution):種群逐漸適應生存環(huán)境,品質不斷得到改良。生物的進化是以種群的形式進行的。


  4. 適應度(fitness):度量某個物種對于生存環(huán)境的適應程度。


  5. 選擇(selection):以一定的概率從種群中選擇若干個個體。一般,選擇過程是一種基于適應度的優(yōu)勝劣汰的過程。


  6. 復制(reproduction):細胞分裂時,遺傳物質DNA通過復制而轉移到新產(chǎn)生的細胞中,新細胞就繼承了舊細胞的基因。


  7. 交叉(crossover):兩個染色體的某一相同位置處DNA被切斷,前后兩串分別交叉組合形成兩個新的染色體。也稱基因重組或雜交。


  8. 變異(mutation):復制時可能(很小的概率)產(chǎn)生某些復制差錯,變異產(chǎn)生新的染色體,表現(xiàn)出新的性狀。


  9. 編碼(coding):DNA中遺傳信息在一個長鏈上按一定的模式排列。遺傳編碼可看作從表現(xiàn)型到基因型的映射。


  10. 解碼(decoding):基因型到表現(xiàn)型的映射。


  11. 個體(individual):指染色體帶有特征的實體。


  12. 種群(population):個體的集合,該集合內個體數(shù)稱為種群的大小。

交叉

在這里插入圖片描述

變異

在這里插入圖片描述

產(chǎn)生子代完整過程

在這里插入圖片描述

遺傳算法應用

遺傳算法的有趣應用很多,諸如尋路問題,8數(shù)碼問題,囚犯困境,動作控制,找圓心問題(在一個不規(guī)則的多邊形中,尋找一個包含在該多邊形內的最大圓圈的圓心),TSP問題,生產(chǎn)調度問題,人工生命模擬等。下面以袋鼠為例子講講遺傳算法。

遺傳算法中每一條染色體,對應著遺傳算法的一個解決方案,一般我們用適應性函數(shù)(fitness function)來衡量這個解決方案的優(yōu)劣。所以從一個基因組到其解的適應度形成一個映射??梢园堰z傳算法的過程看作是一個在多元函數(shù)里面求最優(yōu)解的過程??梢赃@樣想象,這個多維曲面里面有數(shù)不清的“山峰”,而這些山峰所對應的就是局部最優(yōu)解。而其中也會有一個“山峰”的海拔最高的,那么這個就是全局最優(yōu)解。而遺傳算法的任務就是盡量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遺傳算法不一定要找“最高的山峰”,如果問題的適應度評價越小越好的話,那么全局最優(yōu)解就是函數(shù)的最小值,對應的,遺傳算法所要找的就是“最深的谷底”)

在這里插入圖片描述

問題的提出與解決方案

先來考慮如何求出下面的一元函數(shù)在既定區(qū)間的最優(yōu)解。

在這里插入圖片描述


在這里插入圖片描述

“袋鼠跳”問題

既然我們把函數(shù)曲線理解成一個一個山峰和山谷組成的山脈。那么我們可以設想所得到的每一個解就是一只袋鼠,我們希望它們不斷的向著更高處跳去,直到跳到最高的山峰(盡管袋鼠本身不見得愿意那么做)。所以求最大值的過程就轉化成一個“袋鼠跳”的過程。

作為對比下面簡單介紹“袋鼠跳”的幾種方式。

爬山法(最速上升爬山法)

從搜索空間中隨機產(chǎn)生鄰近的點,從中選擇對應解最優(yōu)的個體,替換原來的個體,不斷重復上述過程。因為爬山法只對“鄰近”的點作比較,所以目光比較“短淺”,常常只能收斂到離開初始位置比較近的局部最優(yōu)解上面。對于存在很多局部最優(yōu)點的問題,通過一個簡單的迭代找出全局最優(yōu)解的機會非常渺茫。(在爬山法中,袋鼠最有希望到達最靠近它出發(fā)點的山頂,但不能保證該山頂是珠穆朗瑪峰,或者是一個非常高的山峰。因為一路上它只顧上坡,沒有下坡。)

模擬退火

這個方法來自金屬熱加工過程的啟發(fā)。在金屬熱加工過程中,當金屬的溫度超過它的熔點(Melting Point)時,原子就會激烈地隨機運動。與所有的其它的物理系統(tǒng)相類似,原子的這種運動趨向于尋找其能量的極小狀態(tài)。在這個能量的變遷過程中,開始時,溫度非常高, 使得原子具有很高的能量。隨著溫度不斷降低,金屬逐漸冷卻,金屬中的原子的能量就越來越小,最后達到所有可能的最低點。利用模擬退火的時候,讓算法從較大的跳躍開始,使到它有足夠的“能量”逃離可能“路過”的局部最優(yōu)解而不至于限制在其中,當它停在全局最優(yōu)解附近的時候,逐漸的減小跳躍量,以便使其“落腳 ”到全局最優(yōu)解上。(在模擬退火中,袋鼠喝醉了,而且隨機地大跳躍了很長時間。運氣好的話,它從一個山峰跳過山谷,到了另外一個更高的山峰上。但最后,它漸漸清醒了并朝著它所在的峰頂跳去。)

遺傳算法

模擬物競天擇的生物進化過程,通過維護一個潛在解的群體執(zhí)行了多方向的搜索,并支持這些方向上的信息構成和交換。是以面為單位的搜索,比以點為單位的搜索,更能發(fā)現(xiàn)全局最優(yōu)解。(在遺傳算法中,有很多袋鼠,它們降落到喜瑪拉雅山脈的任意地方。這些袋鼠并不知道它們的任務是尋找珠穆朗瑪峰。但每過幾年,就在一些海拔高度較低的地方射殺一些袋鼠,并希望存活下來的袋鼠是多產(chǎn)的,在它們所處的地方生兒育女。)(或者換個說法。從前,有一大群袋鼠,它們被莫名其妙的零散地遺棄于喜馬拉雅山脈。于是只好在那里艱苦的生活。海拔低的地方彌漫著一種無色無味的毒氣,海拔越高毒氣越稀薄。可是可憐的袋鼠們對此全然不覺,還是習慣于活蹦亂跳。于是,不斷有袋鼠死于海拔較低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有機會生兒育女。就這樣經(jīng)過許多年,這些袋鼠們竟然都不自覺地聚攏到了一個個的山峰上,可是在所有的袋鼠中,只有聚攏到珠穆朗瑪峰的袋鼠被帶回了美麗的澳洲。)
遺傳算法的實現(xiàn)過程

遺傳算法實現(xiàn)過程

遺傳算法的實現(xiàn)過程實際上就像自然界的進化過程那樣。首先尋找一種對問題潛在解進行“數(shù)字化”編碼的方案。(建立表現(xiàn)型和基因型的映射關系)然后用隨機數(shù)初始化一個種群(那么第一批袋鼠就被隨意地分散在山脈上),種群里面的個體就是這些數(shù)字化的編碼。接下來,通過適當?shù)慕獯a過程之后(得到袋鼠的位置坐標),用適應性函數(shù)對每一個基因個體作一次適應度評估(袋鼠爬得越高,越是受我們的喜愛,所以適應度相應越高)。用選擇函數(shù)按照某種規(guī)定擇優(yōu)選擇(我們要每隔一段時間,在山上射殺一些所在海拔較低的袋鼠,以保證袋鼠總體數(shù)目持平。)。讓個體基因變異(讓袋鼠隨機地跳一跳)。然后產(chǎn)生子代(希望存活下來的袋鼠是多產(chǎn)的,并在那里生兒育女)。遺傳算法并不保證你能獲得問題的最優(yōu)解,但是使用遺傳算法的最大優(yōu)點在于你不必去了解和操心如何去“找”最優(yōu)解。(你不必去指導袋鼠向那邊跳,跳多遠。)而只要簡單的“否定”一些表現(xiàn)不好的個體就行了。(把那些總是愛走下坡路的袋鼠射殺,這就是遺傳算法的精粹?。?/p>

遺傳算法的一般步驟

遺傳算法中每一條染色體,對應著遺傳算法的一個解決方案,一般我們用適應性函數(shù)(fitness function)來衡量這個解決方案的優(yōu)劣。所以從一個基因組到其解的適應度形成一個映射。遺傳算法的實現(xiàn)過程實際上就像自然界的進化過程那樣。
下面我們用袋鼠跳中的步驟一一對應解釋,以方便大家理解:

1.首先尋找一種對問題潛在解進行“數(shù)字化”編碼的方案。(建立表現(xiàn)型和基因型的映射關系)
2.隨機初始化一個種群(那么第一批袋鼠就被隨意地分散在山脈上),種群里面的個體就是這些數(shù)字化的編碼
3.接下來,通過適當?shù)慕獯a過程之后(得到袋鼠的位置坐標)
4.用適應性函數(shù)對每一個基因個體作一次適應度評估(袋鼠爬得越高當然就越好,所以適應度相應越高)
5.用選擇函數(shù)按照某種規(guī)定擇優(yōu)選擇(每隔一段時間,射殺一些所在海拔較低的袋鼠,以保證袋鼠總體數(shù)目持平)
讓個體基因變異(讓袋鼠隨機地跳一跳)
6.然后產(chǎn)生子代(希望存活下來的袋鼠是多產(chǎn)的,并在那里生兒育女)

由此我們可以得出遺傳算法的一般步驟:

1.隨機產(chǎn)生種群
2.根據(jù)策略判斷個體的適應度,是否符合優(yōu)化準則,若符合,輸出最佳個體及其最優(yōu)解,結束。否則,進行下一步
3.依據(jù)適應度選擇父母,適應度高的個體被選中的概率高,適應度低的個體被淘汰
4.用父母的染色體按照一定的方法進行交叉,生成子代
5.對子代染色體進行變異
由交叉和變異產(chǎn)生新一代種群,返回步驟2,直到最優(yōu)解產(chǎn)生

遺傳算法圖解

在這里插入圖片描述

進化細節(jié)

種群和個體

遺傳算法啟發(fā)自進化理論,而我們知道進化是由種群為單位的,種群是什么呢?維基百科上解釋為:在生物學上,是在一定空間范圍內同時生活著的同種生物的全部個體。顯然要想理解種群的概念,又先得理解個體的概念,在遺傳算法里,個體通常為某個問題的一個解,并且該解在計算機中被編碼為一個向量表示! 我們的例子中要求最大值,所以該問題的解為一組可能的(x,y) (x, y)(x,y)的取值。比如(x=2.1,y=0.8),(x=?1.5,y=2.3)… 就是求最大值問題的一個可能解,也就是遺傳算法里的個體,把這樣的一組一組的可能解的集合就叫做種群?,比如在這個問題中設置100個這樣的x,y 的可能的取值對,這100個個體就構成了種群。

編碼方法

在上面?zhèn)€體概念里提到個體(也就是一組可能解)在計算機程序中被編碼為一個向量表示,而在我們這個問題中,個體是x,y 的取值,是兩個實數(shù),所以問題就可以轉化為如何將實數(shù)編碼為一個向量表示,可能有些朋友有疑惑,實數(shù)在計算機里不是可以直接存儲嗎,為什么需要編碼呢?這里編碼是為了后續(xù)操作(交叉和變異)的方便
生物的DNA有四種堿基對,分別是ACGT,DNA的編碼可以看作是DNA上堿基對的不同排列,不同的排列使得基因的表現(xiàn)出來的性狀也不同(如單眼皮雙眼皮)。在計算機中,我們可以模仿這種編碼,但是堿基對的種類只有兩種,分別是0,1。只要我們能夠將不同的實數(shù)表示成不同的0,1二進制串表示就完成了編碼,也就是說其實我們并不需要去了解一個實數(shù)對應的二進制具體是多少,我們只需要保證有一個映射

y=f(x),x is decimal system,y is binary system


  • 1

能夠將十進制的數(shù)編碼為二進制即可,至于這個映射是什么,其實可以不必關心。將個體(可能解)編碼后的二進制串叫做染色體,染色體(或者有人叫DNA)就是個體(可能解)的二進制編碼表示。為什么可以不必關心映射f(x)呢?因為其實我們在程序中操縱的都是二進制串,而二進制串生成時可以隨機生成。
編碼是應用遺傳算法時要解決的首要問題,也是設計遺傳算法時的一個關鍵步驟。編碼方法影響到交叉算子、變異算子等遺傳算子的運算方法,大很大程度上決定了遺傳進化的效率。
迄今為止人們已經(jīng)提出了許多種不同的編碼方法。總的來說,這些編碼方法可以分為三大類:二進制編碼法、浮點編碼法、符號編碼法。下面分別進行介紹:

二進制編碼

就像人類的基因有AGCT 4種堿基序列一樣。不過在這里我們只用了0和1兩種堿基,然后將他們串成一條鏈形成染色體。一個位能表示出2種狀態(tài)的信息量,因此足夠長的二進制染色體便能表示所有的特征。這便是二進制編碼。如下:

1110001010111

它由二進制符號0和1所組成的二值符號集。有以下一些優(yōu)點:
1.編碼、解碼操作簡單易行
2.交叉、變異等遺傳操作便于實現(xiàn)
3.符合最小字符集編碼原則
4.利用模式定理對算法進行理論分析

缺點:對于一些連續(xù)函數(shù)的優(yōu)化問題,由于其隨機性使得其局部搜索能力較差,如對于一些高精度的問題,當解迫近于最優(yōu)解后,由于其變異后表現(xiàn)型變化很大(比如00000變異成10000等),不連續(xù),所以會遠離最優(yōu)解,達不到穩(wěn)定。

浮點編碼法

二進制編碼雖然簡單直觀,但明顯地存在著連續(xù)函數(shù)離散化時的映射誤差。個體長度較短時,可能達不到精度要求,而個體編碼長度較長時,雖然能提高精度,但增加了解碼的難度,使遺傳算法的搜索空間急劇擴大。

所謂浮點法,是指個體的每個基因值用某一范圍內的一個浮點數(shù)來表示。在浮點數(shù)編碼方法中,必須保證基因值在給定的區(qū)間限制范圍內,遺傳算法中所使用的交叉、變異等遺傳算子也必須保證其運算結果所產(chǎn)生的新個體的基因值也在這個區(qū)間限制范圍內。如下所示:

1.2-3.2-5.3-7.2-1.4-9.7

浮點數(shù)編碼方法有下面幾個優(yōu)點:
1.適用于在遺傳算法中表示范圍較大的數(shù)
2.適用于精度要求較高的遺傳算法
3.便于較大空間的遺傳搜索
4.改善了遺傳算法的計算復雜性,提高了運算交率
5.便于遺傳算法與經(jīng)典優(yōu)化方法的混合使用
6.便于設計針對問題的專門知識的知識型遺傳算子
7.便于處理復雜的決策變量約束條件

符號編碼法

符號編碼法是指個體染色體編碼串中的基因值取自一個無數(shù)值含義、而只有代碼含義的符號集如{A,B,C…}。
符號編碼的主要優(yōu)點是:
1.符合有意義積術塊編碼原則
2.便于在遺傳算法中利用所求解問題的專門知識
3.便于遺傳算法與相關近似算法之間的混合使用。

袋鼠染色體編碼

在上面介紹了一系列編碼方式以后,那么,如何利用上面的編碼來為我們的袋鼠染色體編碼呢?首先我們要明確一點:編碼無非就是建立從基因型到表現(xiàn)型的映射關系。這里的表現(xiàn)型可以理解為個體特征(比如身高、體重、毛色等等)。那么,在此問題下,我們關心的個體特征就是:袋鼠的位置坐標(因為我們要把海拔低的袋鼠給殺掉)。無論袋鼠長什么樣,愛吃什么。我們關心的始終是袋鼠在哪里,并且只要知道了袋鼠的位置坐標(位置坐標就是相應的染色體編碼,可以通過解碼得出),我們就可以:
1.在喜馬拉雅山脈的地圖上找到相應的位置坐標,算出海拔高度。(相當于通過自變量求得適應函數(shù)的值)然后判讀該不該射殺該袋鼠。
2.可以知道染色體交叉和變異后袋鼠新的位置坐標。
上文所提的求一元函數(shù)最大值的問題。在上面我們把極大值比喻為山峰,那么,袋鼠的位置坐標可以比喻為區(qū)間[-1, 2]的某一個x坐標(有了x坐標,再通過函數(shù)表達式可以算出函數(shù)值 <==> 得到了袋鼠染色體編碼,解碼得到位置坐標,在喜馬拉雅山脈地圖查詢位置坐標算出海拔高度)。這個x坐標是一個實數(shù),現(xiàn)在,說白了就是怎么對這個x坐標進行編碼。下面以二進制編碼為例,不過這種情況下以二進制編碼比較復雜。

一定長度的二進制編碼序列,只能表示一定精度的浮點數(shù)。在這里假如我們要求解精確到六位小數(shù),由于區(qū)間為[-1,2],所以長度為3 ,為了保證精度要求,至少把區(qū)間[-1,2]分為3 × 10^6等份。又因為

在這里插入圖片描述


所以編碼的二進制串至少需要22位。
把一個二進制串(b0,b1,…bn)轉化位區(qū)間里面對應的實數(shù)值通過下面兩個步驟。
1.將一個二進制串代表的二進制數(shù)轉化為10進制數(shù):

在這里插入圖片描述


2.對應區(qū)間內的實數(shù):

在這里插入圖片描述


例如一個二進制串<1000101110110101000111>表示實數(shù)值0.637197

在這里插入圖片描述


以上編碼方式只是舉個例子便于理解,編碼的方式千奇百怪,層出不窮,每個問題可能采用的編碼方式都不一樣。在這一點上大家要注意。

評價個體的適應度–適應度函數(shù)(fitness function)

適應度函數(shù)主要是通過個體特征從而判斷個體的適應度。在本例的袋鼠跳中,我們只關心袋鼠的海拔高度,以此來判斷是否該射殺該袋鼠。這樣一來,該函數(shù)就非常簡單了。只要輸入袋鼠的位置坐標,在通過相應查找運算,返回袋鼠當前位置的海拔高度就行。

適應度函數(shù)也稱評價函數(shù),是根據(jù)目標函數(shù)確定的用于區(qū)分群體中個體好壞的標準。適應度函數(shù)總是非負的,而目標函數(shù)可能有正有負,故需要在目標函數(shù)與適應度函數(shù)之間進行變換。
評價個體適應度的一般過程為:

1.對個體編碼串進行解碼處理后,可得到個體的表現(xiàn)型。
2.由個體的表現(xiàn)型可計算出對應個體的目標函數(shù)值
根據(jù)最優(yōu)化問題的類型,由目標函數(shù)值按一定的轉換規(guī)則求出個體的適應度

射殺一些袋鼠–選擇函數(shù)(selection)

遺傳算法中的選擇操作就是用來確定如何從父代群體中按某種方法選取那些個體,以便遺傳到下一代群體。選擇操作用來確定重組或交叉?zhèn)€體,以及被選個體將產(chǎn)生多少個子代個體。前面說了,我們希望海拔高的袋鼠存活下來,并盡可能繁衍更多的后代。但我們都知道,在自然界中,適應度高的袋鼠越能繁衍后代,但這也是從概率上說的而已。畢竟有些適應度低的袋鼠也可能逃過我們的眼睛。
那么,怎么建立這種概率關系呢?
下面介紹幾種常用的選擇算子:

輪盤賭選擇(Roulette Wheel Selection):是一種回放式隨機采樣方法。每個個體進入下一代的概率等于它的適應度值與整個種群中個體適應度值和的比例。選擇誤差較大。

隨機競爭選擇(Stochastic Tournament):每次按輪盤賭選擇一對個體,然后讓這兩個個體進行競爭,適應度高的被選中,如此反復,直到選滿為止。

最佳保留選擇:首先按輪盤賭選擇方法執(zhí)行遺傳算法的選擇操作,然后將當前群體中適應度最高的個體結構完整地復制到下一代群體中。

無回放隨機選擇(也叫期望值選擇Excepted Value Selection):根據(jù)每個個體在下一代群體中的生存期望來進行隨機選擇運算。方法如下:
(1) 計算群體中每個個體在下一代群體中的生存期望數(shù)目N。
(2) 若某一個體被選中參與交叉運算,則它在下一代中的生存期望數(shù)目減去0.5,若某一個體未 被選中參與交叉運算,則它在下一代中的生存期望數(shù)目減去1.0。
(3) 隨著選擇過程的進行,若某一個體的生存期望數(shù)目小于0時,則該個體就不再有機會被選中。

確定式選擇:按照一種確定的方式來進行選擇操作。具體操作過程如下:
(1) 計算群體中各個個體在下一代群體中的期望生存數(shù)目N。
(2) 用N的整數(shù)部分確定各個對應個體在下一代群體中的生存數(shù)目。
(3) 用N的小數(shù)部分對個體進行降序排列,順序取前M個個體加入到下一代群體中。至此可完全確定出下一代群體中M個個體。

無回放余數(shù)隨機選擇:可確保適應度比平均適應度大的一些個體能夠被遺傳到下一代群體中,因而選擇誤差比較小。

均勻排序:對群體中的所有個體按期適應度大小進行排序,基于這個排序來分配各個個體被選中的概率。

最佳保存策略:當前群體中適應度最高的個體不參與交叉運算和變異運算,而是用它來代替掉本代群體中經(jīng)過交叉、變異等操作后所產(chǎn)生的適應度最低的個體。

隨機聯(lián)賽選擇:每次選取幾個個體中適應度最高的一個個體遺傳到下一代群體中。

排擠選擇:新生成的子代將代替或排擠相似的舊父代個體,提高群體的多樣性。

以輪盤賭選擇為例:
假如有5條染色體,他們的適應度分別為5、8、3、7、2。
那么總的適應度為:F = 5 + 8 + 3 + 7 + 2 = 25。
那么各個個體的被選中的概率為:
α1 = ( 5 / 25 ) * 100% = 20%
α2 = ( 8 / 25 ) * 100% = 32%
α3 = ( 3 / 25 ) * 100% = 12%
α4 = ( 7 / 25 ) * 100% = 28%
α5 = ( 2 / 25 ) * 100% = 8%

在這里插入圖片描述


當指針在這個轉盤上轉動,停止下來時指向的個體就是天選之人啦。可以看出,適應性越高的個體被選中的概率就越大。

遺傳–染色體交叉(crossover)

遺傳算法的交叉操作,是指對兩個相互配對的染色體按某種方式相互交換其部分基因,從而形成兩個新的個體。
適用于二進制編碼個體或浮點數(shù)編碼個體的交叉算子:
1.單點交叉(One-point Crossover):指在個體編碼串中只隨機設置一個交叉點,然后再該點相互交換兩個配對個體的部分染色體。
2.兩點交叉與多點交叉
(1) 兩點交叉(Two-point Crossover):在個體編碼串中隨機設置了兩個交叉點,然后再進行部分基因交換。
(2) 多點交叉(Multi-point Crossover)
3.均勻交叉(也稱一致交叉,Uniform Crossover):兩個配對個體的每個基因座上的基因都以相同的交叉概率進行交換,從而形成兩個新個體。
4.算術交叉(Arithmetic Crossover):由兩個個體的線性組合而產(chǎn)生出兩個新的個體。該操作對象一般是由浮點數(shù)編碼表示的個體。

變異–基因突變(Mutation)

遺傳算法中的變異運算,是指將個體染色體編碼串中的某些基因座上的基因值用該基因座上的其它等位基因來替換,從而形成新的個體。
例如下面這串二進制編碼:

101101001011001

經(jīng)過基因突變后,可能變成以下這串新的編碼:

001101011011001

以下變異算子適用于二進制編碼和浮點數(shù)編碼的個體:
基本位變異(Simple Mutation):對個體編碼串中以變異概率、隨機指定的某一位或某幾位僅因座上的值做變異運算。
均勻變異(Uniform Mutation):分別用符合某一范圍內均勻分布的隨機數(shù),以某一較小的概率來替換個體編碼串中各個基因座上的原有基因值。(特別適用于在算法的初級運行階段)
邊界變異(Boundary Mutation):隨機的取基因座上的兩個對應邊界基因值之一去替代原有基因值。特別適用于最優(yōu)點位于或接近于可行解的邊界時的一類問題。
非均勻變異:對原有的基因值做一隨機擾動,以擾動后的結果作為變異后的新基因值。對每個基因座都以相同的概率進行變異運算之后,相當于整個解向量在解空間中作了一次輕微的變動。
高斯近似變異:進行變異操作時用符號均值為P的平均值,方差為P**2的正態(tài)分布的一個隨機數(shù)來替換原有的基因值。

clear all; clc global gen; NIND=50;%種群規(guī)模 MAXGEN=200;%最大迭代數(shù) Pm=0.2;%變異概率 m=2;%供應基地數(shù)量 n=5;%候選配送中心數(shù)量 L=8;%最終用戶數(shù)量 A=[40 50];%供應能力 M=[30 20 35 35 25];%配送中心最大容量 D=[10 10 10 15 5 15 10 15];%用戶需求量 ff=[120 120 120 120 120];%物流中心固定費用 vv=[8 12 11 10 10];%物流中心可變成本 aa=[7 7 8 12 11;14 12 9 6 8];%各供貨基地到配送中心運費 cc=[5 11 3 8 5 10 11 11 14 16 8 9 4 7 4 4 10 11 3 5 1 5 9 5 15 13 9 6 7 2 10 2 9 7 3 2 6 5 12 8];%配送中心到用戶運費 P=3;%選3處配送中心 center=5;%配送中心數(shù)量 f=ff'; c=cc'; v=vv'; a=aa(:);%各供貨基地到配送中心運費[s1(i);s(i)] [b]=gaminlp(NIND,center,MAXGEN,Pm,m,n,L,P,A,M,D,f,v,a,c)

?

?


【路徑規(guī)劃】基于遺傳算法實現(xiàn)物流中心配送方案matlab源碼的評論 (共 條)

分享到微博請遵守國家法律
满洲里市| 苍南县| 息烽县| 砚山县| 阜康市| 拉萨市| 黄浦区| 枣强县| 岑溪市| 庆云县| 大宁县| 寿宁县| 永济市| 乐山市| 上林县| 腾冲县| 肥东县| 卓尼县| 五华县| 三河市| 太保市| 鹤山市| 宜兴市| 甘南县| 夏河县| 南皮县| 峨山| 威远县| 正定县| 壤塘县| 石楼县| 叶城县| 靖江市| 云阳县| 本溪市| 南丰县| 镇原县| 桦南县| 新营市| 蓬安县| 翁牛特旗|