溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法

發(fā)布時(shí)間:2022-04-24 14:25:46 來(lái)源:億速云 閱讀:272 作者:iii 欄目:大數(shù)據(jù)

這篇“R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法”文章吧。

什么是遺傳算法?

遺傳算法是一類借鑒生物界的進(jìn)化規(guī)律(適者生存、優(yōu)勝劣汰的遺傳機(jī)制)演化而來(lái)的隨機(jī)化搜索方法;是模擬達(dá)爾文進(jìn)化論和孟德?tīng)栠z傳學(xué)機(jī)理的計(jì)算模型。主要特點(diǎn)是直接對(duì)結(jié)構(gòu)對(duì)象進(jìn)行操作,不存在求導(dǎo)和函數(shù)連續(xù)性的限定;具有更好的全局尋優(yōu)能力;采用概率化的尋優(yōu)方法,能自動(dòng)獲取和指導(dǎo)優(yōu)化的搜索空間,自適應(yīng)地調(diào)整搜索方向,不需要確定的規(guī)則。遺傳算法由編碼、適應(yīng)度評(píng)估和遺傳運(yùn)算三部分組成,其中遺傳運(yùn)算又包括染色體的復(fù)制、變異、交叉等。

遺傳算法的實(shí)現(xiàn)

1、編碼

遺傳算法的編碼有浮點(diǎn)編碼和二進(jìn)制編碼兩種,我們介紹二進(jìn)制編碼規(guī)則(因?yàn)槎M(jìn)制編碼方便染色體進(jìn)行遺傳、變異和突變等操作)。設(shè)某個(gè)參數(shù)的取值范圍為  (L,U),使用長(zhǎng)度為k的二進(jìn)制編碼表示該參數(shù),則此時(shí)的對(duì)應(yīng)關(guān)系為:

R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法

2、解碼

解碼的目的是為了將不直觀的二進(jìn)制數(shù)據(jù)還原成十進(jìn)制。個(gè)體的二進(jìn)制編碼對(duì)應(yīng)的解碼公式如下所示

R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法

遺傳算法的編碼和解碼過(guò)程在宏觀上可以對(duì)應(yīng)生物的基因型和表現(xiàn)型,微觀上可以對(duì)應(yīng)基因的轉(zhuǎn)錄和翻譯。

3、交配

“交配運(yùn)算”是使用單點(diǎn)或多點(diǎn)進(jìn)行交叉的算子。首先隨機(jī)產(chǎn)生一個(gè)或多個(gè)交配點(diǎn)的位置,然后兩個(gè)個(gè)體在交配點(diǎn)互換部分基因編碼從而形成子個(gè)體。例如,染色體S1=0100101和染色體S2=1010010交換后三位的基因,則會(huì)形成兩個(gè)子個(gè)體S3=0100010和S4=1010101

R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法

4、突變

“突變運(yùn)算”是使用基本的位運(yùn)算進(jìn)行基因突變。為了避免算法在迭代過(guò)程中種群過(guò)早收斂,對(duì)于二進(jìn)制的基因編碼組成的個(gè)體種群,實(shí)行基因碼的小幾率翻轉(zhuǎn)。例如染色體S=1101101,將其第四位上的1變成0得到S’=1100101,S’可以看做原染色體通過(guò)變異產(chǎn)生的子染色體。

5、個(gè)體適應(yīng)度評(píng)估

進(jìn)化論中的適應(yīng)度,是表示某一個(gè)體對(duì)環(huán)境的適應(yīng)能力,也表示該個(gè)體繁殖后代的能力。遺傳算法的適應(yīng)度函數(shù)也叫評(píng)價(jià)函數(shù),是用來(lái)判斷群體中的個(gè)體的優(yōu)劣程度的指標(biāo),它是根據(jù)所求問(wèn)題的目標(biāo)函數(shù)來(lái)進(jìn)行評(píng)估的。

遺傳算法在搜索進(jìn)化過(guò)程中一般不需要其他外部信息,僅用評(píng)估函數(shù)來(lái)評(píng)估個(gè)體或解的優(yōu)劣,并作為以后進(jìn)行遺傳操作的依據(jù)。由于遺傳算法中,適應(yīng)度函數(shù)要比較排序并在此基礎(chǔ)上計(jì)算選擇該利率,所以適應(yīng)度函數(shù)的值要取正值。

6、復(fù)制

復(fù)制運(yùn)算是根據(jù)個(gè)體的適應(yīng)度大小決定下代遺傳的可能性,設(shè)個(gè)體i的適應(yīng)度為 fi,則個(gè)體i被選取的概率為

R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法

若個(gè)體適應(yīng)度高,則被選取的幾率大,它的基因在種群中擴(kuò)散的概率就會(huì)比較大。個(gè)體復(fù)制幾率比較小的個(gè)體,在遺傳的過(guò)程中會(huì)逐漸被淘汰。

偽代碼實(shí)現(xiàn)

#染色體的類class Chrom:    chrom = []    fitness = 0    def showChrom(self):        print(self.chrom)    def showFitness(self):        print(self.fitness)
#基礎(chǔ)參數(shù)N = 200  #種群內(nèi)個(gè)體數(shù)目mut = 0.2  #突變概率acr = 0.2  #交叉概率
pop = {}  #存儲(chǔ)染色體的字典for i in range(N):    pop['chrom'+str(i)] = Chrom()chromNodes = 2  #染色體節(jié)點(diǎn)數(shù)(變量個(gè)數(shù))iterNum = 10000  #迭代次數(shù)chromRange = [[0, 10], [0, 10]]  #染色體范圍aveFitnessList = []  #平均適應(yīng)度bestFitnessList = []  #最優(yōu)適應(yīng)度
#初始染色體pop = Genetic.initialize(pop, chromNodes, chromRange)pop = Fitness.calFitness(pop)  #計(jì)算適應(yīng)度bestChrom = Genetic.findBest(pop)  #尋找最優(yōu)染色體bestFitnessList.append(bestChrom[1])  #將當(dāng)前最優(yōu)適應(yīng)度壓入列表中aveFitnessList.append(Genetic.calAveFitness(pop, N))  #計(jì)算并存儲(chǔ)平均適應(yīng)度
#開(kāi)始迭代for t in range(iterNum):    #染色體突變    pop = Genetic.mutChrom(pop, mut, chromNodes, bestChrom, chromRange)    #染色體交換    pop = Genetic.acrChrom(pop, acr, chromNodes)    #尋找最優(yōu)    nowBestChrom = Genetic.findBest(pop)    #比較前一個(gè)時(shí)間的最優(yōu)和現(xiàn)在的最優(yōu)    bestChrom = Genetic.compareChrom(nowBestChrom, bestChrom)    #尋找與替換最劣    worseChrom = Genetic.findWorse(pop)    pop[worseChrom[0]].chrom = pop[bestChrom[0]].chrom.copy()    pop[worseChrom[0]].fitness = pop[bestChrom[0]].fitness    #存儲(chǔ)最優(yōu)與平均    bestFitnessList.append(bestChrom[1])    aveFitnessList.append(Genetic.calAveFitness(pop, N))

以上就是關(guān)于“R語(yǔ)言怎么實(shí)現(xiàn)遺傳算法”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI