版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.遺傳算法 ( GA , Genetic Algorithm ) ,也稱進(jìn)化算法 。 遺傳算法是受達(dá)爾文的進(jìn)化論的啟發(fā),借鑒生物進(jìn)化過程而提出的一種啟發(fā)式搜索算法。因此在介紹遺傳算法前有必要簡單的介紹生物進(jìn)化知識。一.進(jìn)化論知識作為遺傳算法生物背景的介紹,下面內(nèi)容了解即可:種群(Population):生物的進(jìn)化以群體的形式進(jìn)行,這樣的一個(gè)群體稱為種群。個(gè)體:組成種群的單個(gè)生物?;? Gene ):一個(gè)遺傳因子。染色體( Chromosome ):包含一組的基因。生存競爭,適者生存:對環(huán)境適應(yīng)度高的、牛B的個(gè)體參與繁殖的機(jī)會比較多,后代就會越來越多。適應(yīng)度低的個(gè)體參與繁殖的機(jī)會比較少,后代就
2、會越來越少。遺傳與變異:新個(gè)體會遺傳父母雙方各一部分的基因,同時(shí)有一定的概率發(fā)生基因變異。簡單說來就是:繁殖過程,會發(fā)生基因交叉( Crossover ) ,基因突變 ( Mutation ) ,適應(yīng)度( Fitness )低的個(gè)體會被逐步淘汰,而適應(yīng)度高的個(gè)體會越來越多。那么經(jīng)過N代的自然選擇后,保存下來的個(gè)體都是適應(yīng)度很高的,其中很可能包含史上產(chǎn)生的適應(yīng)度最高的那個(gè)個(gè)體。二.遺傳算法思想借鑒生物進(jìn)化論,遺傳算法將要解決的問題模擬成一個(gè)生物進(jìn)化的過程,通過復(fù)制、交叉、突變等操作產(chǎn)生下一代的解,并逐步淘汰掉適應(yīng)度函數(shù)值低的解,增加適應(yīng)度函數(shù)值高的解。這樣進(jìn)化N代后就很有可能會進(jìn)化出適應(yīng)度函數(shù)值
3、很高的個(gè)體。舉個(gè)例子,使用遺傳算法解決“0-1背包問題”的思路:0-1背包的解可以編碼為一串0-1字符串(0:不取,1:取) ;首先,隨機(jī)產(chǎn)生M個(gè)0-1字符串,然后評價(jià)這些0-1字符串作為0-1背包問題的解的優(yōu)劣;然后,隨機(jī)選擇一些字符串通過交叉、突變等操作產(chǎn)生下一代的M個(gè)字符串,而且較優(yōu)的解被選中的概率要比較高。這樣經(jīng)過G代的進(jìn)化后就可能會產(chǎn)生出0-1背包問題的一個(gè)“近似最優(yōu)解”。編碼:需要將問題的解編碼成字符串的形式才能使用遺傳算法。最簡單的一種編碼方式是二進(jìn)制編碼,即將問題的解編碼成二進(jìn)制位數(shù)組的形式。例如,問題的解是整數(shù),那么可以將其編碼成二進(jìn)制位數(shù)組的形式。將0-1字符串作為0-1背
4、包問題的解就屬于二進(jìn)制編碼。遺傳算法有3個(gè)最基本的操作:選擇,交叉,變異。選擇:選擇一些染色體來產(chǎn)生下一代。一種常用的選擇策略是“比例選擇”,也就是個(gè)體被選中的概率與其適應(yīng)度函數(shù)值成正比。假設(shè)群體的個(gè)體總數(shù)是M,那么那么一個(gè)體Xi被選中的概率為f(Xi)/( f(X1) + f(X2) + . + f(Xn) ) 。比例選擇實(shí)現(xiàn)算法就是所謂的“輪盤賭算法”( Roulette Wheel Selection ) ,輪盤賭算法的一個(gè)簡單的實(shí)現(xiàn)如下:輪盤賭算法/* 按設(shè)定的概率,隨機(jī)選中一個(gè)個(gè)體* Pi表示第i個(gè)個(gè)體被選中的概率*/intRWS()m=0;r=Random(0,1);/r為0至1的
5、隨機(jī)數(shù)for(i=1;i=N; i+)/*產(chǎn)生的隨機(jī)數(shù)在mm+Pi間則認(rèn)為選中了i* 因此i被選中的概率是Pi*/m=m+Pi;if(r=m)returni;交叉(Crossover):2條染色體交換部分基因,來構(gòu)造下一代的2條新的染色體。例如:交叉前:00000|0|1000011100|0|00101交叉后:00000|0|1000011100|0|00101染色體交叉是以一定的概率發(fā)生的,這個(gè)概率記為Pc 。變異(Mutation):在繁殖過程,新產(chǎn)生的染色體中的基因會以一定的概率出錯(cuò),稱為變異。變異發(fā)生的概率記為Pm 。例如:變異前:00變異后:01適應(yīng)度函數(shù)( Fitness Fun
6、ction ):用于評價(jià)某個(gè)染色體的適應(yīng)度,用f(x)表示。有時(shí)需要區(qū)分染色體的適應(yīng)度函數(shù)與問題的目標(biāo)函數(shù)。例如:0-1背包問題的目標(biāo)函數(shù)是所取得物品價(jià)值,但將物品價(jià)值作為染色體的適應(yīng)度函數(shù)可能并不一定適合。適應(yīng)度函數(shù)與目標(biāo)函數(shù)是正相關(guān)的,可對目標(biāo)函數(shù)作一些變形來得到適應(yīng)度函數(shù)。三.基本遺傳算法的偽代碼基本遺傳算法偽代碼/* Pc:交叉發(fā)生的概率* Pm:變異發(fā)生的概率* M:種群規(guī)模* G:終止進(jìn)化的代數(shù)* Tf:進(jìn)化產(chǎn)生的任何一個(gè)個(gè)體的適應(yīng)度函數(shù)超過Tf,則可以終止進(jìn)化過程*/初始化Pm,Pc,M,G,Tf等參數(shù)。隨機(jī)產(chǎn)生第一代種群Popdo計(jì)算種群Pop中每一個(gè)體的適應(yīng)度F(i)。初始化
7、空種群newPopdo根據(jù)適應(yīng)度以比例選擇算法從種群Pop中選出2個(gè)個(gè)體if( random (0,1)Pc )對2個(gè)個(gè)體按交叉概率Pc執(zhí)行交叉操作if( random (0,1)Pm )對2個(gè)個(gè)體按變異概率Pm執(zhí)行變異操作將2個(gè)新個(gè)體加入種群newPop中 until ( M個(gè)子代被創(chuàng)建 )用newPop取代Popuntil ( 任何染色體得分超過Tf, 或繁殖代數(shù)超過G )四.基本遺傳算法優(yōu)化下面的方法可優(yōu)化遺傳算法的性能。精英主義(Elitist Strategy)選擇:是基本遺傳算法的一種優(yōu)化。為了防止進(jìn)化過程中產(chǎn)生的最優(yōu)解被交叉和變異所破壞,可以將每一代中的最優(yōu)解原封不動的復(fù)制到下一
8、代中。插入操作:可在3個(gè)基本操作的基礎(chǔ)上增加一個(gè)插入操作。插入操作將染色體中的某個(gè)隨機(jī)的片段移位到另一個(gè)隨機(jī)的位置。五. 使用AForge.Genetic解決TSP問題AForge.NET是一個(gè)C#實(shí)現(xiàn)的面向人工智能、計(jì)算機(jī)視覺等領(lǐng)域的開源架構(gòu)。AForge.NET中包含有一個(gè)遺傳算法的類庫。AForge.NET主頁:AForge.NET代碼下載:介紹一下AForge的遺傳算法用法吧。AForge.Genetic的類結(jié)構(gòu)如下:圖1. AForge.Genetic的類圖 下面用AForge.Genetic寫個(gè)解決TSP問題的最簡單實(shí)例。測試數(shù)據(jù)集采用網(wǎng)上流傳的中國31個(gè)省會城市的坐標(biāo):操作過程:
9、 (1) 下載AForge.NET類庫,網(wǎng)址: (2) 創(chuàng)建C#空項(xiàng)目GenticTSP。然后在AForge目錄下找到AForge.dll和AForge.Genetic.dll,將其拷貝到TestTSP項(xiàng)目的bin/Debug目錄下。再通過“Add Reference.”將這兩個(gè)DLL添加到工程。 (3) 將31個(gè)城市坐標(biāo)數(shù)據(jù)保存為bin/Debug/Data.txt 。 (4) 添加TSPFitnessFunction.cs,加入如下代碼:TSPFitnessFunction類usingSystem;usingAForge.Genetic;namespaceGenticTSP/Fitness
10、 function for TSP task (Travaling Salasman Problem)/publicclassTSPFitnessFunction : IFitnessFunction/mapprivateint, map=null;/ConstructorpublicTSPFitnessFunction(int, map)this.map=map;/Evaluate chromosome - calculates its fitness value/publicdoubleEvaluate(IChromosome chromosome)return1/(PathLength(
11、chromosome)+1);/Translate genotype to phenotype/publicobjectTranslate(IChromosome chromosome)returnchromosome.ToString();/Calculate path length represented by the specified chromosome/publicdoublePathLength(IChromosome chromosome)/salesman pathushort path=(PermutationChromosome)chromosome).Value;/ch
12、eck path sizeif(path.Length!=map.GetLength(0)thrownewArgumentException(Invalid path specified - not all cities are visited);/path lengthintprev=path0;intcurr=pathpath.Length-1;/calculate distance between the last and the first citydoubledx=mapcurr,0-mapprev,0;doubledy=mapcurr,1-mapprev,1;doublepathL
13、ength=Math.Sqrt(dx*dx+dy*dy);/calculate the path length from the first city to the lastfor(inti=1, n=path.Length; in; i+)/get current citycurr=pathi;/calculate distancedx=mapcurr,0-mapprev,0;dy=mapcurr,1-mapprev,1;pathLength+=Math.Sqrt(dx*dx+dy*dy);/put current city as previousprev=curr;returnpathLe
14、ngth; (5) 添加GenticTSP.cs,加入如下代碼:GenticTSP類usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.IO;usingAForge;usingAForge.Genetic;namespaceGenticTSPclassGenticTSPstaticvoidMain()StreamReader reader=newStreamReader(Data.txt);intcitiesCount=31;/城市數(shù)int, map=newintci
15、tiesCount,2;for(inti=0; icitiesCount; i+)stringvalue=reader.ReadLine();string temp=value.Split();mapi,0=int.Parse(temp0);/讀取城市坐標(biāo)mapi,1=int.Parse(temp1);/create fitness functionTSPFitnessFunction fitnessFunction=newTSPFitnessFunction(map);intpopulationSize=1000;/種群最大規(guī)模/* 0:EliteSelection算法* 1:RankSel
16、ection算法* 其他:RouletteWheelSelection 算法*/intselectionMethod=0;/create populationPopulation population=newPopulation(populationSize,newPermutationChromosome(citiesCount),fitnessFunction,(selectionMethod=0)?(ISelectionMethod)newEliteSelection() :(selectionMethod=1)?(ISelectionMethod)newRankSelection() :(ISelectionMethod)newRouletteWheelSelection();/iterationsintiter=1;intiterations=5000;/迭代最大周期/loopwhile(iteriterations)/run one epoch of genetic algorithmp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB34∕T 4405-2023 大別山牛舍飼化生產(chǎn)技術(shù)規(guī)程
- DB34∕T 4322-2022 水利業(yè)務(wù)移動端門戶開發(fā)與應(yīng)用接入規(guī)范
- 劉文峰尤克里里社團(tuán)實(shí)施方案
- 電器采購合同
- 8.1數(shù)學(xué)廣角-數(shù)與形(進(jìn)階作業(yè))2024-2025學(xué)年六年級上冊數(shù)學(xué) 人教版(含解析)
- 應(yīng)聘美容顧問合同模板
- 飯店務(wù)工合同模板
- 疫情月嫂合同模板
- 搬運(yùn)工 合同模板
- 涼粉加盟合同模板
- 五年級數(shù)學(xué)(小數(shù)乘除法)計(jì)算題專項(xiàng)練習(xí)及答案
- 統(tǒng)編五年級上冊《口語交際:講民間故事》課件
- 2024統(tǒng)編新版小學(xué)五年級語文上冊第六單元:大單元整體教學(xué)設(shè)計(jì)
- 粵教版四年級上冊科學(xué)全冊教學(xué)設(shè)計(jì)教案
- 2024年貴州磷化(集團(tuán))限責(zé)任公司社會招聘高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 水上急救操作考核試卷
- 職業(yè)本科《大學(xué)英語》課程標(biāo)準(zhǔn)
- Unit 5 Free time 第二課時(shí)(教學(xué)設(shè)計(jì))-2024-2025學(xué)年Join in 外研劍橋英語四年級上冊
- 公司網(wǎng)站信息發(fā)布管理辦法
- 2024-2030年中國溶解漿行業(yè)發(fā)展態(tài)勢及供需趨勢預(yù)測研究報(bào)告
- 2024年秋新人教版七年級上冊數(shù)學(xué)教學(xué)課件 3.1 第2課時(shí) 列代數(shù)式
評論
0/150
提交評論