日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 如何實現遺傳算法

瀏覽:22日期:2022-07-10 14:02:52

1、基本概念

遺傳算法(GA)是最早由美國Holland教授提出的一種基于自然界的“適者生存,優勝劣汰”基本法則的智能搜索算法。該法則很好地詮釋了生物進化的自然選擇過程。遺傳算法也是借鑒該基本法則,通過基于種群的思想,將問題的解通過編碼的方式轉化為種群中的個體,并讓這些個體不斷地通過選擇、交叉和變異算子模擬生物的進化過程,然后利用“優勝劣汰”法則選擇種群中適應性較強的個體構成子種群,然后讓子種群重復類似的進化過程,直到找到問題的最優解或者到達一定的進化(運算)時間。

python 如何實現遺傳算法

基因:在GA算法中,基因代表了具體問題解的一個決策變量,問題解和染色體中基因的對應關系如下所示:

python 如何實現遺傳算法

種群:多個個體即組成一個種群。GA算法中,一個問題的多組解即構成了問題的解的種群。

2、主要步驟

GA算法的基本步驟如下:

Step 1. 種群初始化。選擇一種編碼方案然后在解空間內通過隨機生成的方式初始化一定數量的個體構成GA的種群。

Step 2. 評估種群。利用啟發式算法對種群中的個體(矩形件的排入順序)生成排樣圖并依此計算個體的適應函數值(利用率),然后保存當前種群中的最優個體作為搜索到的最優解。

Step 3. 選擇操作。根據種群中個體的適應度的大小,通過輪盤賭或者期望值方法,將適應度高的個體從當前種群中選擇出來。

Step 4. 交叉操作。將上一步驟選擇的個體,用一定的概率閥值Pc控制是否利用單點交叉、多點交叉或者其他交叉方式生成新的交叉個體。

Step 5. 變異操作。用一定的概率閥值Pm控制是否對個體的部分基因執行單點變異或多點變異。

Step 6. 終止判斷。若滿足終止條件,則終止算法,否則返回Step 2。

流程圖如下所示:

python 如何實現遺傳算法

3、主要操作介紹

3.1 種群初始化

種群的初始化和具體的問題有關。比如一個問題有n個決策變量{x1,x2,…,xn}。每個決策變量有取值范圍:下界{L1,L2,…,Ln}和上界{U1,U2,…,Un},則種群中個體的初始化即隨機地在決策變量的取值范圍內生成各個決策變量的值:Xj={x1,x2,...,xn},其中xi屬于范圍(Li,Ui)內。所有的個體即構成種群。當每個個體都初始化后,即種群完成初始化。

3.2 評價種群

種群的評價即計算種群中個體的適應度值。假設種群population有popsize個個體。依次計算每個個體的適應度值及評價種群。

3.3 選擇操作

GA算法中常見的選擇操作有輪盤賭方式:種群中適應度值更優的個體被選擇的概率越大。假設popsize=4,按照如下表達式計算各個個體的被選擇概率的大小,然后用圓餅圖表示如下。

P(Xj) = fit(Xj)/(fit(X1)+fit(X2)+fit(X3)+fit(X4)),j=1,2,3,4

python 如何實現遺傳算法

當依據輪盤賭方式進行選擇時,則概率越大的越容易被選擇到。

3.4 交叉操作

交叉操作也有許多種:單點交叉,兩點交叉等。此處僅講解一下兩點交叉。首先利用選擇操作從種群中選擇兩個父輩個體parent1和parent2,然后隨機產生兩個位置pos1和pos2,將這兩個位置中間的基因位信息進行交換,便得到下圖所示的off1和off2兩個個體,但是這兩個個體中一般會存在基因位信息沖突的現象(整數編碼時),此時需要對off1和off2個體進行調整:off1中的沖突基因根據parent1中的基因調整為parent2中的相同位置處的基因。如off1中的“1”出現了兩次,則第二處的“1”需要調整為parent1中“1”對應的parent2中的“4”,依次類推處理off1中的相沖突的基因。需要注意的是,調整off2,則需要參考parent2。

python 如何實現遺傳算法

3.5 變異操作

變異操作的話,根據不同的編碼方式有不同的變異操作。

如果是浮點數編碼,則變異可以就染色體中間的某一個基因位的信息進行變異(重新生成或者其他調整方案)。

python 如何實現遺傳算法

如果是采用整數編碼方案,則一般有多種變異方法:位置變異和符號變異。

位置變異:

python 如何實現遺傳算法

符號變異:

python 如何實現遺傳算法

4、Python代碼

#-*- coding:utf-8 -*-import randomimport mathfrom operator import itemgetterclass Gene: ’’’ This is a class to represent individual(Gene) in GA algorithom each object of this class have two attribute: data, size ’’’ def __init__(self,**data): self.__dict__.update(data)self.size = len(data[’data’])#length of gene class GA: ’’’ This is a class of GA algorithm. ’’’ def __init__(self,parameter): ’’’ Initialize the pop of GA algorithom and evaluate the pop by computing its’ fitness value . The data structure of pop is composed of several individuals which has the form like that:{’Gene’:a object of class Gene, ’fitness’: 1.02(for example)} Representation of Gene is a list: [b s0 u0 sita0 s1 u1 sita1 s2 u2 sita2]’’’ #parameter = [CXPB, MUTPB, NGEN, popsize, low, up] self.parameter = parameter low = self.parameter[4] up = self.parameter[5]self.bound = [] self.bound.append(low) self.bound.append(up)pop = [] for i in range(self.parameter[3]): geneinfo = [] for pos in range(len(low)):geneinfo.append(random.uniform(self.bound[0][pos], self.bound[1][pos]))#initialise popluation fitness = evaluate(geneinfo)#evaluate each chromosome pop.append({’Gene’:Gene(data = geneinfo), ’fitness’:fitness})#store the chromosome and its fitness self.pop = pop self.bestindividual = self.selectBest(self.pop)#store the best chromosome in the population def selectBest(self, pop): ’’’ select the best individual from pop ’’’ s_inds = sorted(pop, key = itemgetter('fitness'), reverse = False) return s_inds[0] def selection(self, individuals, k): ’’’ select two individuals from pop ’’’ s_inds = sorted(individuals, key = itemgetter('fitness'), reverse=True)#sort the pop by the reference of 1/fitness sum_fits = sum(1/ind[’fitness’] for ind in individuals) #sum up the 1/fitness of the whole popchosen = [] for i in xrange(k): u = random.random() * sum_fits#randomly produce a num in the range of [0, sum_fits] sum_ = 0 for ind in s_inds:sum_ += 1/ind[’fitness’]#sum up the 1/fitnessif sum_ > u: #when the sum of 1/fitness is bigger than u, choose the one, which means u is in the range of [sum(1,2,...,n-1),sum(1,2,...,n)] and is time to choose the one ,namely n-th individual in the pop chosen.append(ind) breakreturn chosen def crossoperate(self, offspring): ’’’ cross operation ’’’ dim = len(offspring[0][’Gene’].data) geninfo1 = offspring[0][’Gene’].data#Gene’s data of first offspring chosen from the selected pop geninfo2 = offspring[1][’Gene’].data#Gene’s data of second offspring chosen from the selected poppos1 = random.randrange(1,dim)#select a position in the range from 0 to dim-1, pos2 = random.randrange(1,dim) newoff = Gene(data = [])#offspring produced by cross operation temp = [] for i in range(dim): if (i >= min(pos1,pos2) and i <= max(pos1,pos2)):temp.append(geninfo2[i])#the gene data of offspring produced by cross operation is from the second offspring in the range [min(pos1,pos2),max(pos1,pos2)] else:temp.append(geninfo1[i])#the gene data of offspring produced by cross operation is from the frist offspring in the range [min(pos1,pos2),max(pos1,pos2)] newoff.data = tempreturn newoff def mutation(self, crossoff, bound): ’’’ mutation operation ’’’dim = len(crossoff.data) pos = random.randrange(1,dim)#chose a position in crossoff to perform mutation. crossoff.data[pos] = random.uniform(bound[0][pos],bound[1][pos]) return crossoff def GA_main(self): ’’’ main frame work of GA ’’’popsize = self.parameter[3]print('Start of evolution')# Begin the evolution for g in range(NGEN): print('-- Generation %i --' % g) #Apply selection based on their converted fitness selectpop = self.selection(self.pop, popsize)nextoff = []while len(nextoff) != popsize: # Apply crossover and mutation on the offspring # Select two individualsoffspring = [random.choice(selectpop) for i in xrange(2)]if random.random() < CXPB: # cross two individuals with probability CXPB crossoff = self.crossoperate(offspring) fit_crossoff = evaluate(self.xydata, crossoff.data)# Evaluate the individuals if random.random() < MUTPB: # mutate an individual with probability MUTPB muteoff = self.mutation(crossoff,self.bound) fit_muteoff = evaluate(self.xydata, muteoff.data)# Evaluate the individuals nextoff.append({’Gene’:muteoff,’fitness’:fit_muteoff}) # The population is entirely replaced by the offspring self.pop = nextoff # Gather all the fitnesses in one list and print the stats fits = [ind[’fitness’] for ind in self.pop] length = len(self.pop) mean = sum(fits) / length sum2 = sum(x*x for x in fits) std = abs(sum2 / length - mean**2)**0.5 best_ind = self.selectBest(self.pop) if best_ind[’fitness’] < self.bestindividual[’fitness’]:self.bestindividual = best_ind print('Best individual found is %s, %s' % (self.bestindividual[’Gene’].data,self.bestindividual[’fitness’])) print(' Min fitness of current pop: %s' % min(fits)) print(' Max fitness of current pop: %s' % max(fits)) print(' Avg fitness of current pop: %s' % mean) print(' Std of currrent pop: %s' % std)print('-- End of (successful) evolution --') if __name__ == '__main__': CXPB, MUTPB, NGEN, popsize = 0.8, 0.3, 50, 100#control parameters up = [64, 64, 64, 64, 64, 64, 64, 64, 64, 64]#upper range for variables low = [-64, -64, -64, -64, -64, -64, -64, -64, -64, -64]#lower range for variables parameter = [CXPB, MUTPB, NGEN, popsize, low, up] run = GA(parameter) run.GA_main()

以上就是python 如何實現遺傳算法的詳細內容,更多關于python 遺傳算法的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆成人av在线| 亚洲青青久久| 久久久久99| 精品色999| 开心激情综合| 久久精品青草| 国产精品国码视频| 欧美日韩亚洲一区三区| 国产精品一区二区美女视频免费看 | 1000部精品久久久久久久久| 婷婷精品视频| 日本精品不卡| 91精品国产自产观看在线| 国内精品麻豆美女在线播放视频| 日韩精品第二页| 综合国产视频| av中文字幕在线观看第一页| 欧美一级二级三级视频| 欧美+亚洲+精品+三区| 国产精品sm| 黄色亚洲精品| 亚洲一区中文| 欧美69视频| 黄色亚洲在线| 亚洲精品大片| 国产精品jk白丝蜜臀av小说| 国产欧美在线| 久久青草久久| 亚洲小说春色综合另类电影| 久久美女精品| 97久久亚洲| 久久国产欧美| 日韩精品一区二区三区中文在线| 日韩av电影一区| 国产精品社区| 日韩精品影视| a国产在线视频| 免费看av不卡| 国产一区二区三区国产精品| 日本久久一区| 日韩精品久久久久久久软件91| 亚洲va中文在线播放免费| 国产精品视频一区二区三区四蜜臂| 日韩av成人高清| 亚洲一二三区视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 私拍精品福利视频在线一区| 日韩中文在线电影| 国产精品久久久久久妇女| 婷婷综合社区| 日韩精品久久久久久久电影99爱| 激情五月色综合国产精品| 制服诱惑一区二区| 国产精品久久国产愉拍| 亚洲电影在线| 国产精品一区毛片| 欧美日韩三区| 麻豆传媒一区二区三区| 亚洲人成网站在线在线观看| 亚洲青青久久| 欧美国产另类| 久久久噜噜噜| 日韩一区二区久久| 在线看片不卡| 精品视频黄色| 日韩电影二区| 野花国产精品入口| 日韩制服丝袜先锋影音| 欧美日本不卡高清| 久久精品国产99国产| 国产成人免费视频网站视频社区| 99精品在线免费在线观看| 日韩一区二区三区四区五区| 美女久久久精品| 美女91精品| 欧美啪啪一区| 亚洲国产日韩欧美在线| 国产精品一区高清| 99综合视频| 国产视频网站一区二区三区| 男人操女人的视频在线观看欧美| 九一成人免费视频| 亚洲一区激情| 精品国产aⅴ| 老鸭窝毛片一区二区三区| 日韩精品社区| 99免费精品| 精品一区91| 国产日韩视频| 日本一区二区中文字幕| 亚洲激情不卡| 久久视频一区| 欧美13videosex性极品| 欧美韩一区二区| 加勒比视频一区| 亚洲1区在线观看| 丝袜诱惑制服诱惑色一区在线观看| 老色鬼精品视频在线观看播放| 欧洲精品一区二区三区| 天堂av在线一区| 午夜精品免费| 国产精品久久免费视频| 噜噜噜久久亚洲精品国产品小说| 久久影院午夜精品| 精品国产一区二区三区2021| 蜜桃传媒麻豆第一区在线观看| 免费在线小视频| 毛片在线网站| 欧美sm一区| 国产一区国产二区国产三区| 国产精品一区二区三区www| 国产日韩欧美在线播放不卡| 在线成人直播| 欧美1区免费| 激情欧美国产欧美| 日韩国产欧美一区二区三区| 国产一区二区三区黄网站| 亚洲黄色免费av| 91欧美精品| 国产精品久久久久久久久久妞妞| 视频一区二区三区入口| 国产综合激情| 亚洲一区二区毛片| 亚洲专区一区| 亚洲v天堂v手机在线| 婷婷亚洲成人| 久久国际精品| 亚洲精选久久| 日韩精品第二页| 国产探花一区二区| 久久精品国产网站| 国产综合精品| 久久久久久免费视频| 欧美一区二区三区高清视频| 亚洲久久在线| 精品久久久亚洲| 国产在线成人| 日本欧美一区二区| 国精品产品一区| 日韩精品永久网址| 久久国产精品久久久久久电车| 欧美日韩黄网站| 成人午夜在线| 视频一区在线视频| 久久久精品区| 日韩福利视频导航| 99精品一区| 嫩草伊人久久精品少妇av杨幂 | 一级欧美视频| 久久国产精品美女| 欧美~级网站不卡| 久久影院资源站| 97久久亚洲| 中文字幕av一区二区三区人| 五月天av在线| 夜久久久久久| 九九99久久精品在免费线bt| 黄色aa久久| 亚洲激情偷拍| 精品午夜视频| 亚洲福利专区| 亚洲一二av| 免费在线观看一区| 私拍精品福利视频在线一区| 另类国产ts人妖高潮视频| 国产精品亚洲片在线播放| 新版的欧美在线视频| 亚洲免费中文| 国产亚洲精品美女久久| 国产日韩专区| 日韩理论视频| 日本国产欧美| 偷拍亚洲精品| 亚洲激情五月| 九九在线精品| 三级小说欧洲区亚洲区| 日韩成人av影视| 一本色道精品久久一区二区三区| 日韩伦理一区| 欧美日韩尤物久久| 在线日韩电影| 日韩亚洲精品在线观看| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产毛片精品| 超碰成人av| 国产精品a级| 久久精品人人| 久久国产毛片| 日本久久一区| 久久电影tv| 性一交一乱一区二区洋洋av| 亚洲另类黄色| 国产精选在线| 蜜臀久久99精品久久久久久9| 国产一卡不卡| 樱桃视频成人在线观看| 香蕉视频成人在线观看| 国产精品极品在线观看| 久久久久久美女精品| 人人精品久久|