国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

遺傳算法之Python實現(xiàn)代碼

2020-02-16 10:21:05
字體:
供稿:網(wǎng)友

寫在前面

之前的文章中已經(jīng)講過了遺傳算法的基本流程,并且用MATLAB實現(xiàn)過一遍了。這一篇文章主要面對的人群是看過了我之前的文章,因此我就不再贅述遺傳算法是什么以及基本的內(nèi)容了,假設(shè)大家已經(jīng)知道我是怎么寫遺傳算法的了。

Python的遺傳算法主函數(shù)

我的思想是,創(chuàng)建一個染色體的類,其中包括了兩個變量:染色體chrom與適應(yīng)度fitness。因此我們就可以通過直接建立對象來作為種群中的個體。

#染色體的類class Chrom:  chrom = []  fitness = 0  def showChrom(self):    print(self.chrom)  def showFitness(self):    print(self.fitness)

所以我們開始設(shè)置基礎(chǔ)參數(shù)。其中種群的表達方式我用的是字典,也就是用一個字典來保存種群內(nèi)的所有個體,這個也是我想出來的創(chuàng)建多個對象的方法。

將字典的索引為個體的標號,如:chrom1, chrom2等。字典索引的值就是一個對象。這個對象擁有兩個屬性,就是染色體與適應(yīng)度。

其實在這一方便來說,我覺得在思路上是優(yōu)于利用MATLAB的矩陣式編程的。因為這樣可以很直觀的將個體與個體的屬性這一種思想給表達出來,相比一堆矩陣來說,在邏輯上比較容易接受。

#基礎(chǔ)參數(shù)N = 200 #種群內(nèi)個體數(shù)目mut = 0.2 #突變概率acr = 0.2 #交叉概率pop = {} #存儲染色體的字典for i in range(N):  pop['chrom'+str(i)] = Chrom()chromNodes = 2 #染色體節(jié)點數(shù)(變量個數(shù))iterNum = 10000 #迭代次數(shù)chromRange = [[0, 10], [0, 10]] #染色體范圍aveFitnessList = [] #平均適應(yīng)度bestFitnessList = [] #最優(yōu)適應(yīng)度

之后就是初始染色體了,其中就牽扯到了各種用來初始化種群、計算適應(yīng)度、找最優(yōu)等函數(shù),我在這里分出了兩個文件,分別為Genetic.py與Fitness.py。

Genetic.py里面有八個函數(shù),主要包含了作用于種群或者染色體操作的函數(shù),分別為:

    findBest函數(shù),用于尋找種群中的最優(yōu)染色體; findworse函數(shù),用于尋找種群中的最劣染色體; initialize函數(shù),用于初始化種群; calAveFitness函數(shù),用于計算種群的平均適應(yīng)度; mutChrom函數(shù),用于對染色體進行變異; inRange函數(shù),用于判斷染色體節(jié)點值是否越界; acrChrom函數(shù),用于對染色體進行交叉; compareChrom函數(shù),用于比較兩個染色體孰優(yōu)孰劣。

Fitness.py里面有兩個函數(shù),主要包含了對適應(yīng)度操作的函數(shù),分別為:

    calFitness函數(shù),用來迭代每一個個體,并計算適應(yīng)度(利用funcFitness函數(shù)計算); funcFitness函數(shù),計算單個個體的適應(yīng)度。

因此可以列出初始化代碼為

#初始染色體pop = Genetic.initialize(pop, chromNodes, chromRange)pop = Fitness.calFitness(pop) #計算適應(yīng)度bestChrom = Genetic.findBest(pop) #尋找最優(yōu)染色體bestFitnessList.append(bestChrom[1]) #將當前最優(yōu)適應(yīng)度壓入列表中aveFitnessList.append(Genetic.calAveFitness(pop, N)) #計算并存儲平均適應(yīng)度            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 德格县| 团风县| 托克托县| 蒙自县| 大田县| 天水市| 独山县| 和顺县| 北流市| 乌兰县| 凤城市| 化德县| 安康市| 城固县| 临颍县| 岳阳市| 哈密市| 拉萨市| 广宗县| 遵义县| 廊坊市| 双流县| 玛纳斯县| 特克斯县| 江华| 长宁区| 淮阳县| 无极县| 依兰县| 南京市| 奈曼旗| 维西| 祥云县| 渝中区| 溆浦县| 鄂温| 陵川县| 彭水| 景洪市| 白朗县| 新巴尔虎右旗|