国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

遺傳算法及基于該算法的典型問題的求解實踐

這篇具有很好參考價值的文章主要介紹了遺傳算法及基于該算法的典型問題的求解實踐。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

說明

? ? 遺傳算法是一個很有用的工具,它可以幫我們解決生活和科研中的諸多問題。最近在看波束形成相關內(nèi)容時了解到可以用這個算法來優(yōu)化陣元激勵以壓低旁瓣,于是特地了解和學習了一下這個算法,覺得蠻有意思的,于是把這兩天關于該算法的學習和實踐的內(nèi)容總結成了一篇博文。

? ? 遺傳算法核心的思想/步驟在于迭代。這篇博文第一次寫作(2024.3.15)只包含了一些關于該算法基本且必要的概念的介紹,以及兩個相關應用的實踐,后面有更多相關的應用實踐(比如波束形成的優(yōu)化)、細節(jié)的積累和理解,我會不定期迭代該博文。

Blog

20240315 博文第一次撰寫

目錄

說明

目錄

一、遺傳算法概述

1.1 遺傳算法的來源及應用領域

1.2 與遺傳算法有關的基本名詞概念

二、基于遺傳算法求解各類問題的基本思路和流程

三、基于遺傳算法求解調(diào)度問題

3.1 問題描述

3.2 問題建模及參數(shù)預設

3.3 求解過程幾個核心代碼模塊解讀

3.3.1 如何尋找父輩染色體

3.3.2 如何交叉

3.3.3 如何變異

3.4 求解結果

3.5 小結與思考

四、基于遺傳算法求解旅行商問題

4.1 問題描述

4.2 問題建模及參數(shù)預設

4.3 求解過程幾個核心代碼模塊解讀

4.3.1 如何交叉

4.3.2 如何變異

4.4 求解結果

4.5 小結與思考

五、其它應用問題

六、總結

七、參考資料

八、代碼參考


一、遺傳算法概述

1.1 遺傳算法的來源及應用領域

? ? 百度百科上的介紹很寬泛,但是也有諸多有用信息:遺傳算法(Genetic Algorithm,GA)最早是由美國的 John holland于20世紀70年代提出,該算法是根據(jù)大自然中生物體進化規(guī)律而設計提出的。是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優(yōu)解的方法。該算法通過數(shù)學的方式,利用計算機仿真運算,將問題的求解過程轉(zhuǎn)換成類似生物進化中的染色體基因的交叉、變異等過程。在求解較為復雜的組合優(yōu)化問題時,相對一些常規(guī)的優(yōu)化算法,通常能夠較快地獲得較好的優(yōu)化結果。遺傳算法已被人們廣泛地應用于組合優(yōu)化、機器學習、信號處理、自適應控制和人工生命等領域。

1.2 與遺傳算法有關的基本名詞概念

? ? 理解該算法,首先從與其有關的基本概念入手,在后文的應用實踐中我會將這些概念在應用問題的數(shù)學建模以及求解流程中一一對應。參考資料[1]中對這些概念的介紹很棒,本節(jié)內(nèi)容主要參考該資料。

1. 基因與染色體

? ? 求解各類應用問題時,我們首先需要將要解決的問題映射成一個數(shù)學問題,也即:數(shù)學建模!該數(shù)學問題的一個可行解便被稱為一條“染色體”,一個可行解可能由多個元素(多個變量)構成,該解的每個元素(變量)就被稱為染色體上的一個“基因”。

2. 適應度

? ? 遺傳算法求解問題的本質(zhì)我覺得就是一個在不斷的迭代中逼近最優(yōu)解的過程。我們每次迭代都會有很多的染色體(可行解)產(chǎn)生,那我們?nèi)绾魏饬窟@些染色體的優(yōu)劣呢?在遺傳算法中我們用適應度來衡量每條染色體的優(yōu)劣,我們構造一個適應度函數(shù)來給每次迭代中生成的所有染色體“打分”,得到每條染色體的適應度。在后續(xù)處理過程中,我們可能會將適應度較低的染色體淘汰掉,只保留適應度較高的染色體,從而使得若干次迭代后染色體的質(zhì)量越來越優(yōu)。[類似達爾文進化論中的觀點,一些無法適應環(huán)境的個體(等價于這里一些適應度低的染色體)會被淘汰掉]。

3. 交叉

? ? 假定每次迭代都會生成N條染色體,交叉則是用來解決如何生成新染色體的問題:交叉的過程需要從上一代的染色體中隨機尋找兩條染色體,然后將這兩條染色體通過一些算法生成新的染色體(比如有單點交叉、雙點交叉、順序交叉等,不同的應用場景可能會使用不同的交叉算法,這里的概念讀者可以參考資料[2],后文的實際應用時會對這里再展開講),此外,還有一個問題是如何選擇這兩條染色體?在上一個步驟中的適應度評價中,我們計算得到了每條染色體的適應度,在交叉時,我們會基于適應度概率(通過比如輪盤賭等算法來進行挑選)優(yōu)先選擇適應度更大的染色體來進行交叉。適應度概率的計算: ?染色體i的適應度概率(被挑選的概率) = 染色體i的適應度/所有染色體的適應度之和。

4. 變異

? ? 交叉時因為我們優(yōu)先選了適應度高的染色體,所以能保證每次進化能留下優(yōu)良的基因,但它僅僅是對原有的結果集進行選擇,基因還是那么幾個,只不過交換了他們的組合順序,這只能保證經(jīng)過N次進化后,計算結果更接近于局部最優(yōu)解,而可能永遠沒辦法達到全局最優(yōu)解。為了解決這一個問題,我們需要引入變異變異的方法:對于前述交叉過程生成的染色體,我們可以適當?shù)兀ㄟ@里牽扯到一個叫變異率的參數(shù)設置問題:如果對每條交叉后的染色體進行變異其實很難收斂的,所以選擇其中的多少條進行變異,是一個需要考慮的問題選擇其中的幾條,在這些染色體上隨機選擇若干個基因,然后隨機修改基因的值(變異的方法有很多,如:位翻轉(zhuǎn)突變、交換突變、反轉(zhuǎn)突變、倒換突變等,同樣,參考資料[2]中有比較詳細的說明,后文的實際應用中我也會結合流程做細節(jié)介紹,從而給現(xiàn)有的染色體引入了新的基因(或改變了基因的排序),突破了當前搜索的限制,更有利于算法尋找到全局最優(yōu)解。

5. 復制

? ? 每次進化中,為了保留上一代優(yōu)良的染色體,需要將上一代中適應度較高的幾條染色體直接原封不動地復制給下一代。假設每次進化都需生成N條染色體,那么每次進化中,通過交叉方式需要生成N-M條染色體,剩余的M條染色體通過復制上一代適應度最高的M條染色體而來。

6. 關于迭代的結束

? ? 在基于遺傳算法求解各類問題時,我們應該迭代(進化)多少次才結束?一般有兩種方式來確定迭代何時結束:一是預設迭代次數(shù),在一些實際應用中,可以事先統(tǒng)計出達到較好效果時的進化次數(shù)。比如,你通過大量實驗發(fā)現(xiàn):不管輸入的數(shù)據(jù)如何變化,算法在進化K次之后就能夠得到最優(yōu)解,那么你就可以將進化的次數(shù)設成K。然而,實際情況往往沒有那么理想因為不同的初始輸入會導致得到最優(yōu)解時的迭代次數(shù)相差甚遠。二是限定精度范圍,如果算法要達到全局最優(yōu)解可能要經(jīng)過很多很多次進化,這會極大影響系統(tǒng)的性能。那么我們可以在算法的精確度和系統(tǒng)效率之間尋找一個平衡點。我們事先設定一個可以接收的結果范圍,當算法進行k次進化后,一旦發(fā)現(xiàn)了當前的結果已經(jīng)在誤差范圍之內(nèi)了,就終止算法。不過這種方式下也有缺點:有些情況下可能稍微進化幾次就進入了誤差允許范圍,但有些情況下需要進化很多很多很多很多次才能進入誤差允許范圍。這種不確定性導致算法的執(zhí)行效率不可控。

二、基于遺傳算法求解各類問題的基本思路和流程

? ? 前文對遺傳算法可能涉及的各參數(shù)及其用途(在算法中的角色)做了說明,將這些概念串起來,便構成了典型的遺傳算法處理流程。

? ? 對于各類應用問題,首先需要明確問題并進行數(shù)學建模。

? ? 然后預設參數(shù):比如我們需要預設多少條染色體、預設多少的迭代次數(shù)、預設多少的變異率、預設多少的染色體是從父輩直接復制的?

? ? 隨后基于數(shù)學建模的結果,針對該應用問題,初始化染色體、設計適應度函數(shù)來計算這些初始化染色體的適應度和被選取概率。

? ? 接著就可以進入迭代的循環(huán)里:交叉 --->?變異 --->?復制 --->?交叉 --->?變異 --->?復制?…? ?直至達到預設的迭代次數(shù),或者滿足其它預設迭代終止條件。

? ? 典型的遺傳算法流程如下:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖2.1 ?典型的遺傳算法流程圖

? ? 在本章以及上一章的指導下,我們可以嘗試將該算法部署至各類應用問題上。

三、基于遺傳算法求解調(diào)度問題

3.1 問題描述

? ? 假設有N個任務,需要負載均衡器(你)分配給M個服務器節(jié)點去處理。每個任務的任務長度(任務量)、每臺服務器節(jié)點的處理速度已知,請給出一種任務分配方式,使得所有任務的總處理時間最短。[與該服務器調(diào)度類似的各種問題的解答方法一樣]

3.2 問題建模及參數(shù)預設

? ? 問題建模:(調(diào)度問題的建模相對簡單),假設我們已知問題中每個任務的長度為:Task = [Task(1),Task(2),… Task(N)],每個節(jié)點的處理速度為:Nodes = [Node(1),Node(2),… Node(M)]。我們可以構造每個任務和每個節(jié)點之間對應的處理時間矩陣

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3-1)

? ? 表示將第i個任務交給第j個節(jié)點處理所需的時間。

? ? 初始化染色體:我們預設初始染色體數(shù)(或者常說的初始種群數(shù))為K,因為每條染色體對應一個可行解,所以容易理解的是:每條染色體是一個長度為N的一維向量:A = [A(1),A(2),… A(N)],向量中的每一個元素A(n)對應一個基因,其物理意義是我們將第N個任務分配給第A(n)個服務器節(jié)點。我們可以基于隨機分配的方法完成對K條染色體的初始化,此時我們可以得到一個染色體對應的矩陣,其大小為:K*N。

? ? 設計適應度函數(shù):適應度是我們用來評價每條染色體優(yōu)劣的指標,在本問題中,容易想到可以用每條染色體對應的任務分配下的總耗時來構建適應度函數(shù)

TimeNeed(k) = max(節(jié)點1耗時、節(jié)點2耗時、… 節(jié)點M耗時)? ? ? ? ? (3-2)

? ? 我們對K條染色體分別求其完成任務所需時間(求解過程中我們可以從前面的TimeMatrix矩陣中查找時間),最終可以得到一個長度為K的一維向量:TimeNeed = [TimeNeed(1),TimeNeed(2),… TimeNeed(K)],向量中的每個值對應第k條染色體對應的任務分配下完成任務的耗時。需要注意的是:在該任務中,耗時越少對應的任務分配(染色體)越優(yōu),其適應度也越高,所以這里我們可以對總耗時取倒數(shù)得到每條染色體的適應度:

Adaptability = 1./TimeNeed? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3-3)

? ? 得到適應度后,求每條染色體在交叉時被挑選的概率就簡單多了:

SelectionProbability = Adaptability(k)/(sum(Adaptability))? ? ? ? ? ? ? ? ? ? ? ? ? ?(3-4)

? ? 在完成上面的準備工作后,我們可以進入迭代部分。在后面的幾個應用實踐中,我將不再如此細致做該部分的講述。

3.3 求解過程幾個核心代碼模塊解讀

3.3.1 如何尋找父輩染色體

? ? 在做交叉之前,需要從上一代中尋找父&母兩條染色體。在1.2節(jié)中,是這樣描述該過程:“我們會基于適應度概率(通過比如輪盤賭等算法來進行挑選)優(yōu)先選擇適應度更大的染色體來進行交叉?!痹?.2中已經(jīng)給出了適應度概率(被挑選概率的計算方法),本小節(jié)介紹如何基于輪盤賭算法來完成對父母輩染色體的挑選,代碼塊如下:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖3.1 輪盤賭算法函數(shù)

? ? 該算法的基本原理其實很簡單:首先在[0 1]內(nèi)隨機生成一個概率值randval,然后對之前得到的染色體對應的被挑選概率數(shù)組進行遍歷和概率累加,當在第k個概率處累加的結果:(SelectionProbability(1)+ SelectionProbability(2)+ … SelectionProbability(k)) ≥ randval時,就將k對應的染色體挑出來。該函數(shù)的調(diào)用模塊代碼如下:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖3.2 ?輪盤賭算法的調(diào)用模塊(選擇父&母染色體)

? ? ChromosomeOld對應上一代染色體數(shù)組。為確保兩次選擇的不是同一條染色體,代碼中增加了一個判斷模塊。

? ? 輪盤賭算法是一個簡單且經(jīng)典的選擇父輩染色體的方法,當然,可能還有其它的方法,總之這些方法的主要目的是優(yōu)先選擇被挑選概率大(適應度高)的父輩染色體,但又不失隨機性。

3.3.2 如何交叉

? ? 尋找父輩染色體其實是交叉的一部分,本小節(jié)聊更后面的步驟:得到父輩染色體后如何生成新的染色體?在1.2節(jié)中,這樣描述該過程:“交叉的過程需要從上一代的染色體中隨機尋找兩條染色體,然后將這兩條染色體通過一些算法生成新的染色體(比如有單點交叉、雙點交叉、順序交叉等,不同的應用場景可能會使用不同的交叉算法”。

? ? 在本章探討的調(diào)度問題中,我們不需要考慮每個基因的唯一性:基因之間是可以重復的,或者說不同的任務是可以分配給同一個服務器節(jié)點的。(不過可能其它的應用問題并不是這樣,比如后面章節(jié)將要討論的旅行商問題。)。不需要考慮每個基因的唯一性可以使我們這里設計交叉算法時選擇更多。本次我在代碼中使用了最簡單的單點交叉方法

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖3.3 單點交叉算法模塊

? ? 實現(xiàn)很簡單:我們在隨機選擇一個任務點,然后把父染色體在該節(jié)點前面的部分給到子染色體,把母染色體該節(jié)點后面的部分給到子染色體,便可以得到(生成)一條拼接好的新的染色體。

3.3.3 如何變異

? ? 在1.2節(jié)中對變異部分的描述為:“變異的方法:對于前述交叉過程生成的染色體,我們可以適當?shù)兀ㄟ@里牽扯到一個叫變異率的參數(shù)設置問題:如果對每條交叉后的染色體進行變異其實很難收斂的,所以選擇其中的多少條進行變異,是一個需要考慮的問題選擇其中的幾條,在這些染色體上隨機選擇若干個基因,然后隨機修改基因的值(變異的方法有很多,如:位翻轉(zhuǎn)突變、交換突變、反轉(zhuǎn)突變、倒換突變等”。

? ? 同樣,調(diào)度問題不考慮各基因的不可重復問題,所以方法的選擇上更加靈活,本次我在代碼中隨機選擇了其中一個基因進行突變:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖3.4 變異模塊代碼

? ? 代碼中muteNum對應在預設的變異率下計算得到的我們應該設置多少條需變異的染色體,staynum表示我們需要從上一代復制多少條染色體,這些染色體不參與變異。然后我們從新生成的染色體中去挑選一條染色體,并隨機選擇其一個基因,將之變成隨機的另外一個基因。

3.4 求解結果

? ? 本次仿真中,預設了10個任務,5個服務器節(jié)點,每個任務的長度Task為在[1 20]內(nèi)隨機生成,每個服務器節(jié)點的速度Nodes在[1 10]內(nèi)隨機生成,預設染色體數(shù)100條,預設變異率為0.02,預設迭代次數(shù)為100次,預設每次從上一代中直接復制的染色體數(shù)10條。

? ? 得到的仿真結果如下:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖3.5 ?每次迭代下每條染色體的耗時

? ? 如果我們從每次迭代的結果中選擇耗時最少的那條染色體作為我們的最終解,其實可以看到在經(jīng)過8次左右的迭代后就已經(jīng)有很接近最終耗時3.8的染色體產(chǎn)生了。

3.5 小結與思考

? ? 本章按照第二章所給算法流程的指導,對基于遺傳算法解決調(diào)度問題完成了全流程的仿真實踐和部分算法模塊的細節(jié)刨析,調(diào)度問題算是遺傳算法應用領域中相對簡單、用作入門和熟悉該算法比較合適的一個方向,希望本章的工作內(nèi)容可以對讀者有所幫助。

? ? 此外,在解決該問題的流程中,其實還有諸多的細節(jié)可供思考:比如,1、變異率設置成多少可以更快速地完成迭代? 2、變異的過程中如果多點變異是否會加速迭代? 3、交叉時對父輩染色體的選擇中,我們?nèi)绻粡母怕实偷?K-staynum)條染色體中進行選擇(因為前staynum條染色體我們會直接復制給下一代),對迭代的影響是什么?4、有無其它更優(yōu)的父輩染色體選擇算法、交叉算法?等等。 這些問題都是很有意思的研究方向。

四、基于遺傳算法求解旅行商問題

? ? 考慮到第三章中我已經(jīng)給出了諸多細節(jié),且在理解第三章調(diào)度問題的基礎上再對后續(xù)應用問題進行理解時應該更簡單了,所以第四章以及后續(xù)可能增加的各類應用問題的實踐,我將主要介紹重點&區(qū)別點。

4.1 問題描述

? ? 旅行商問題是一個十分經(jīng)典的問題(于我而言在接觸遺傳算法前我就有了解過)。該問題的描述很簡單:旅行商問題(Travelling Salesman Problem, 簡記TSP,亦稱貨郎擔問題):給定一系列城市和每對城市之間的距離,求解訪問每一座城市一次并回到起始城市的最短回路。[在基于遺傳算法解決該問題時,我們需要時刻注意:每座城市只訪問一次!]

4.2 問題建模及參數(shù)預設

? ? 問題建模:我們已知有N座城市,以及每座城市的坐標CityX = [CityX(1),CityX(2),… CityX(N)]、CityY = [CityY(1),CityY(2),… CityY(N)]。我們可以構造兩兩城市之間的相對距離矩陣

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

(4-1)????????????????

? ? 表示第i個城市與第j個城市之間的相對距離。該矩陣的大小為N*N。

? ? 初始化染色體:我們預設初始染色體數(shù)(或者常說的初始種群數(shù))為K,因為每條染色體對應一個可行解,所以容易理解的是:每條染色體是一個長度為N的一維向量:A = [A(1),A(2),… A(N)],向量中的每一個元素A(n)對應一個基因,其物理意義是我們的旅行商在第n次訪問的城市。我們可以基于隨機分配的方法完成對K條染色體的初始化,此時我們可以得到一個染色體對應的矩陣,其大小為:K*N。不過需要注意的是:每條染色體中的各個基因都有唯一性!

? ? 設計適應度函數(shù):在本問題中,容易想到可以用每條染色體對應的總距離來構建適應度函數(shù)

RangeSum(k) = sum(從城市1到城市2的距離 + 從城市2到城市3的距離 + … +從城市N到城市1的距離)? ? ? ? ? ? ? ? ? ? ? ? ? (4-2)

? ? 我們對K條染色體分別求其所需的總距離時間(求解過程中我們可以從前面的DistanceMatrix矩陣中查找相對距離),最終可以得到一個長度為K的一維向量:DistanceSum = [DistanceSum (1), DistanceSum (2),… DistanceSum (K)],向量中的每個值對應第k條染色體所走的總路程。需要注意的是:在該任務中,距離越短對應的任務分配(染色體)越優(yōu),其適應度也越高,所以這里我們可以對總距離取倒數(shù)得到每條染色體的適應度:

Adaptability = 1./ DistanceSum? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(4-3)

? ? 得到適應度后,求每條染色體在交叉時被挑選的概率就簡單多了:

SelectionProbability = Adaptability(k)/(sum(Adaptability))? ? ? ? ? ? ? ? ? ? ? ? (4-4)

? ? 在完成上面的準備工作后,我們可以進入迭代部分。

4.3 求解過程幾個核心代碼模塊解讀

4.3.1 如何交叉

? ? 旅行商問題和前面調(diào)度問題的一個主要區(qū)別點在于:旅行商下染色體每個基因是各不相同的。所以不能用之前3.3.2節(jié)中的單點交叉來實現(xiàn):因為不能保證父染色體在交叉點前面的基因與母染色體在交叉點之后的基因之間不存在重復。本代碼中我選擇了順序交叉算法來實現(xiàn):

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖4.1 ?順序交叉的實現(xiàn)

? ? 這里實現(xiàn)交叉的思路是:首先隨機找一個交叉點,然后我們把父染色體該交叉點前面的基因全部賦值為子染色體,對于子染色體該交叉點往后的基因,我們對母染色體進行遍歷,如果有發(fā)現(xiàn)子染色體中還沒有的基因,就把該基因附在子染色體后面,直至該子染色體的長度為N。

4.3.2 如何變異

? ? 同樣的理由旅行商問題下染色體每個基因是各不相同的。這里的變異我們隨機選擇兩個基因進行位置調(diào)換來完成變異。

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖4.2 變異算法模塊

? ? muteNum為基于預設的變異率得到的變異染色體數(shù)目。該模塊很簡單:隨機選擇一條染色體、隨機選擇這條染色體不同的兩個基因進行互換。

4.4 求解結果

? ? 本次仿真中,預設了10個城市,每個城市的橫縱坐標為在[1 100]內(nèi)隨機生成,預設染色體數(shù)10條,預設變異率為0.02,預設迭代次數(shù)為100次,預設每次從上一代中直接復制的染色體數(shù)2條。

? ? 得到的仿真結果如下:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖4.3 不同迭代次數(shù)下,各染色體下的總距離

? ? 可以看到隨著迭代次數(shù)的增加,每次生成的染色體對應的總距離整體都在往下移。此外,我選擇了初始化時以及迭代100次后總距離最近的染色體對應的路徑畫圖如下:

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖4.4? 初始化染色體中總距離最短的路徑選擇

遺傳算法及基于該算法的典型問題的求解實踐,自動駕駛?cè)珬9こ處煹? 毫米波雷達部分,雷達成像技術,經(jīng)驗分享,遺傳算法,旅行商問題,調(diào)度問題,Matlab

圖4.5? 迭代100次時所生成的染色體中總距離最短的路徑選擇

4.5 小結與思考

? ? 本章基于遺傳算法解決對旅行商問題進行了全流程的仿真實踐和部分算法模塊的細節(jié)刨析,旅行商問題是很經(jīng)典的組合優(yōu)化問題,其在運籌學和理論計算機科學中都非常重要。希望本章的工作內(nèi)容可以對讀者有所幫助。

? ? 在3.5節(jié)中,我拋出了幾個在求解過程中比較有意思的幾個細節(jié)問題,這里再補充兩個:1、我們初始化的染色體數(shù)量對于迭代的收斂速度有哪些影響? 2、我們設置的直接從上一代復制的染色體數(shù)占整體的比率多高時進化的效果更好?

五、其它應用問題

? ? 我本來想把基于遺傳算法優(yōu)化波束形成也寫進本博文的,但是寫到這里看到內(nèi)容似乎已經(jīng)夠多了。后續(xù)基于遺傳算法的來解決其它問題的實踐,我會將新寫的博文以鏈接的形式附在本章。

六、總結

? ? 本博文對遺傳算法做了系統(tǒng)性&細節(jié)性介紹:包括其相關概念、經(jīng)典的處理流程等。并以調(diào)度問題、旅行商問題作為研究對象,探討了如何使用遺傳算法解決這兩個問題(截止2024.3.15)。如前文說明部分所述:最近在看波束形成相關內(nèi)容時了解到可以用這個算法來優(yōu)化陣元激勵以壓低旁瓣,便特地了解和學習了一下這個算法,覺得蠻有意思的,于是把這兩天關于該算法的學習和實踐的內(nèi)容總結成了一篇博文。我后續(xù)會不定期新增遺傳算法在信號處理、自動駕駛、以及人工智能等方向的應用實踐示例。

七、參考資料

[1] 10分鐘搞懂遺傳算法(含源碼) - 知乎 (zhihu.com)

[2] 遺傳算法中常見遺傳算子 - 知乎 (zhihu.com)

八、代碼參考

本博文的仿真代碼如下(包含.m和.txt版本):

遺傳算法及基于該算法的典型問題的求解實踐博文對應的代碼(Matlab)資源-CSDN文庫文章來源地址http://www.zghlxwxcb.cn/news/detail-842087.html

到了這里,關于遺傳算法及基于該算法的典型問題的求解實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 人工智能導論——遺傳算法求解TSP問題實驗

    人工智能導論——遺傳算法求解TSP問題實驗

    一、實驗目的: 熟悉和掌握遺傳算法的原理、流程和編碼策略,并利用遺傳算法求解組合優(yōu)化問題,理解求解TSP問題的流程并測試主要參數(shù)對結果的影響。 二、實驗原理: 旅行商問題,即TSP問題(Traveling Salesman Problem)是數(shù)學領域中著名問題之一。假設有一個旅行商人要拜

    2023年04月13日
    瀏覽(23)
  • 遺傳算法求解旅行商問題(含python源代碼)

    遺傳算法求解旅行商問題(含python源代碼)

    目錄 前言 編碼初始化種群 計算適應度 選擇 交叉 變異 完整代碼 總結 這次的算法有一點不能確定是否正確,希望有大佬能夠批評指正。 遺傳算法的一般步驟 種群(population) 指同一時間生活在一定自然區(qū)域內(nèi),同種生物的所有個體。 所以種群是由個體組成的,所以先需要

    2024年01月23日
    瀏覽(20)
  • 遺傳算法求解車輛路徑優(yōu)化問題VRP(Python代碼實現(xiàn))

    遺傳算法求解車輛路徑優(yōu)化問題VRP(Python代碼實現(xiàn))

    學會了前面兩篇遺傳算法,但是那都是針對抽象的數(shù)學問題求解的,那么應用到現(xiàn)實中的實際問題中,我們又該怎樣把遺傳算法套進去呢,然后我第一個接觸到的問題就是車輛路徑優(yōu)化問題VRP,當然也是找到了一篇比較好的文章,物流管理論文實現(xiàn):基于遺傳算法的帶時間窗

    2024年01月18日
    瀏覽(20)
  • 模擬退火算法與遺傳算法求解多目標優(yōu)化問題的算法實現(xiàn)(數(shù)學建模)

    模擬退火算法與遺傳算法求解多目標優(yōu)化問題的算法實現(xiàn)(數(shù)學建模)

    模擬退火算法是一種全局優(yōu)化算法,解決的問題通常是找到一個最小化(或最大化)某個函數(shù)的全局最優(yōu)解。它通過模擬物理退火的過程來搜索解空間,在開始時以一定的溫度隨機生成初始解,然后一步步降低溫度,同時在當前解的周圍隨機搜索新的解,并根據(jù)一定概率接受

    2024年02月02日
    瀏覽(27)
  • 人工智能原理實驗4(1)——遺傳算法、蟻群算法求解TSP問題

    人工智能原理實驗4(1)——遺傳算法、蟻群算法求解TSP問題

    TSP問題是組合數(shù)學中一個古老而又困難的問題,也是一個典型的組合優(yōu)化問題,現(xiàn)已歸入NP完備問題類。NP問題用窮舉法不能在有效時間內(nèi)求解,所以只能使用啟發(fā)式搜索。遺傳算法是求解此類問題比較實用、有效的方法之一。下面給出30個城市的位置信息: 應用遺傳算法和蟻

    2024年01月24日
    瀏覽(22)
  • 通用的改進遺傳算法求解帶約束的優(yōu)化問題(MATLAB代碼精講、實際工程經(jīng)驗分享)

    通用的改進遺傳算法求解帶約束的優(yōu)化問題(MATLAB代碼精講、實際工程經(jīng)驗分享)

    在對多約束、非線性問題的求解上,傳統(tǒng)線性規(guī)劃等方法往往無法有效求解(求解時間過長、無法處理非線性約束等。 進化算法是一類強有力的工具,已經(jīng)在多個領域有了較為成功的應用。然而,在利用遺傳算法、粒子群等等進化算法求解實際的優(yōu)化問題時,還存在許多困難

    2023年04月19日
    瀏覽(94)
  • 【優(yōu)化選址】基于matlab遺傳算法求解物流配送中心選址【含Matlab源碼 1917期】

    【優(yōu)化選址】基于matlab遺傳算法求解物流配送中心選址【含Matlab源碼 1917期】

    ?博主簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術同步精進,Matlab項目合作可私信。 ??個人主頁:海神之光 ??代碼獲取方式: 海神之光Matlab王者學習之路—代碼獲取方式 ??座右銘:行百里者,半于九十。 更多Matlab仿真內(nèi)容點擊?? Matlab圖像處理(進階版) 路徑規(guī)劃

    2024年02月04日
    瀏覽(23)
  • 基于遺傳算法解決流水車間調(diào)度問題

    基于遺傳算法解決流水車間調(diào)度問題

    問題描述 n 個工件要在 m 臺機器上加工,每個工件需要經(jīng)過 m 道工序,每道工序要求不同的機器,n 個工件在 m 臺機器上的加工順序相同。工件在機器上的加工時間是給定的,設為 t i j ( i = 1.... , n ; j = 1 , . . . , m ) t_{ij}(i = 1....,n; j = 1,...,m) t ij ? ( i = 1.... , n ; j = 1 , ... , m ) 問

    2024年02月07日
    瀏覽(21)
  • 遺傳算法解決tsp問題(基于python)

    遺傳算法解決tsp問題(基于python)

    目錄 1.遺傳算法簡要介紹 2.tsp問題簡要介紹 3.遺傳算法解決tsp問題的幾個特殊點 4.源碼 ????????簡單來說,遺傳算法是用于解決最優(yōu)化問題的一種搜索算法。其核心基于自然界種群進化的規(guī)律,即初始種群進行交配,在基因?qū)用嫔希渲袝l(fā)生交叉互換、基因突變等變異

    2023年04月12日
    瀏覽(28)
  • python遺傳算法(應用篇1)--求解一元函數(shù)極值

    python遺傳算法(應用篇1)--求解一元函數(shù)極值

    下面我們使用遺傳算法嘗試求解一元函數(shù)的最值 y = s i n ( x 2 ? 1 ) + 2 c o s ( 2 x ) , x ∈ [ 0 , 10 ] y=sin(x^2-1)+2cos(2x),xin [0,10] y = s in ( x 2 ? 1 ) + 2 cos ( 2 x ) , x ∈ [ 0 , 10 ] 生成二進制數(shù)組,形狀為(種群個體數(shù),個體基因個數(shù)),即(m_population, L) 運行結果 將生成的二進制數(shù)組

    2024年02月06日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包