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

首頁 > 學院 > 開發設計 > 正文

機器學習基礎—— 遺傳算法(GA)

2019-11-10 23:04:28
字體:
來源:轉載
供稿:網友

http://blog.csdn.net/lanchunhui/article/details/51112862

機器學習基礎—— 遺傳算法(GA)

2016-04-10 14:44 432人閱讀 評論(0) 收藏 舉報 分類:

遺傳算法(Genetic Algorithms)也是受自然科學的啟發。該類算法的運行過程是先隨機生成一組解,稱之為種群(population)。在優化過程中的每一步,算法會計算整個種群的成本函數,從而得到一個有關題解的有序列表。

其三個主要特性在于:

selection,crossover,mutation

在對題解進行排序之后,一個新的種群——我們稱之為下一代——被創建出來了。首先,我們將當前種群中位于最頂端的題解加入其所在的新種群中。我們稱這一過程為精英選拔(elitism)。新種群的余下部分是由修改最優解后形成的全新解所組成的。

有兩種修改題解的方法。

(1)較為簡單的一種稱為變異(mutation),其通常的做法是對一個既有解進行微小的、簡單的、隨機的改變。

(2)另一種方法稱為交叉(crossover)或配對(breeding)。這種方法是選取最優解中的兩個解,然后將它們按照方式結合。

算法設計中可能涉及的參數主要有,

(1)popsize:種群大小(2)mutPRob:種群的新成員由變異而非交叉得來的概率(3)elite:種群中被認為是最優解且被允許傳遞到下一代的比例(4)maxiter:需要運行多少代

遺傳算法的程序還是比較好寫的,因為流程非常固定;

def geneticalgo(domains, costf, popsize=100, mutprob=.2, elite=.2, maxiter=100): def mutable(c): i = random.randint(0, len(domains)-1) if random.random() < 0.5 and c[i] > domains[i][0]: c[i] -= 1 elif c[i] < domains[i][1]: c[i] += 1 return c def crossover(r1, r2): i = random.randint(1, len(domains)-2) return r1[:i] + r2[i:] pop = [] for i in range(popsize): r = [random.randint(domains[i][0], domains[i][1]) for i range(len(domains))] pop.append(r) topelite = int(popsize*elite) for i in range(maxiter): scores = [(costf(r), r) for r in pop] scores.sort() randked = [v for c, v in scores] pop = ranked[:topelite] while (len(pop) < popsize): if random.random() < mutprob: r = random.randint(0, topelite-1) pop.append(mutable(pop[r])) else: c1 = random.randint(0, topelite-1) c2 = random.randint(0, topelite-1) pop.append(crossover(pop[c1], pop[c2])) print(scores[0][1]) return scores[0][0]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永丰县| 长治市| 南陵县| 南木林县| 平远县| 安塞县| 罗城| 若尔盖县| 象州县| 瑞金市| 东兰县| 昌平区| 鄂伦春自治旗| 新丰县| 大理市| 赤水市| 德昌县| 深圳市| 固安县| 会东县| 喀什市| 自治县| 留坝县| 秦安县| 赣榆县| 宜阳县| 宽甸| 太湖县| 潢川县| 潼关县| 奈曼旗| 黄浦区| 满城县| 叙永县| 孝昌县| 邳州市| 安图县| 朝阳区| 大港区| 资兴市| 建昌县|