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

首頁 > 編程 > Python > 正文

詳解用python實現簡單的遺傳算法

2020-02-16 11:24:34
字體:
來源:轉載
供稿:網友

今天整理之前寫的代碼,發現在做數模期間寫的用python實現的遺傳算法,感覺還是挺有意思的,就拿出來分享一下。

首先遺傳算法是一種優化算法,通過模擬基因的優勝劣汰,進行計算(具體的算法思路什么的就不贅述了)。大致過程分為初始化編碼、個體評價、選擇,交叉,變異。

遺傳算法介紹

遺傳算法是通過模擬大自然中生物進化的歷程,來解決問題的。大自然中一個種群經歷過若干代的自然選擇后,剩下的種群必定是適應環境的。把一個問題所有的解看做一個種群,經歷過若干次的自然選擇以后,剩下的解中是有問題的最優解的。當然,只能說有最優解的概率很大。這里,我們用遺傳算法求一個函數的最大值。

f(x) = 10 * sin( 5x ) + 7 * cos( 4x ),    0 <=  x <= 10

1、將自變量x進行編碼

取基因片段的長度為10, 則10位二進制位可以表示的范圍是0到1023。基因與自變量轉變的公式是x = b2d(individual) * 10 / 1023。構造初始的種群pop。每個個體的基因初始值是[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

2、計算目標函數值

根據自變量與基因的轉化關系式,求出每個個體的基因對應的自變量,然后將自變量代入函數f(x),求出每個個體的目標函數值。

3、適應度函數

適應度函數是用來評估個體適應環境的能力,是進行自然選擇的依據。本題的適應度函數直接將目標函數值中的負值變成0. 因為我們求的是最大值,所以要使目標函數值是負數的個體不適應環境,使其繁殖后代的能力為0.適應度函數的作用將在自然選擇中體現。

4、自然選擇

自然選擇的思想不再贅述,操作使用輪盤賭算法。其具體步驟:

假設種群中共5個個體,適應度函數計算出來的個體適應性列表是fitvalue = [1 ,3, 0, 2, 4] ,totalvalue = 10 , 如果將fitvalue畫到圓盤上,值的大小表示在圓盤上的面積。在轉動輪盤的過程中,單個模塊的面積越大則被選中的概率越大。選擇的方法是將fitvalue轉化為[1 , 4 ,4 , 6 ,10], fitvalue / totalvalue = [0.1 , 0.4 , 0.4 , 0.6 , 1.0] . 然后產生5個0-1之間的隨機數,將隨機數從小到大排序,假如是[0.05 , 0.2 , 0.7 , 0.8 ,0.9],則將0號個體、1號個體、4號個體、4號個體、4號個體拷貝到新種群中。自然選擇的結果使種群更符合條件了。

5、繁殖

假設個體a、b的基因是

a = [1, 0, 0, 0, 0, 1, 1, 1, 0, 0]
b = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1]

這兩個個體發生基因交換的概率pc = 0.6.如果要發生基因交換,則產生一個隨機數point表示基因交換的位置,假設point = 4,則:

a = [1, 0, 0, 0, 0, 1, 1, 1, 0, 0]
b = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1]

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 衡东县| 海淀区| 荆州市| 博罗县| 建宁县| 崇文区| 郧西县| 前郭尔| 宾川县| 汾西县| 四子王旗| 大荔县| 沂源县| 祥云县| 庆城县| 凤凰县| 上林县| 萨迦县| 保靖县| 来凤县| 冕宁县| 铜梁县| 纳雍县| 介休市| 新和县| 桐城市| 增城市| 齐河县| 彰武县| 图木舒克市| 长葛市| 云和县| 绿春县| 万宁市| 大港区| 文水县| 兰西县| 玉龙| 石家庄市| 富宁县| 海伦市|