成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python用戶寶典:了解并實現(xiàn)遺傳算法

譯文
開發(fā) 前端
本文介紹了遺傳算法以及如何用Python實現(xiàn)遺傳算法。

譯者 | 布加迪

審校 | 重樓

遺傳算法是一種基于自然選擇的技術(shù),用于解決復雜問題。由于問題復雜,遺傳算法(而不是其他方法)被用來得出解決問題的合理方案。本文介紹遺傳算法的基礎知識以及如何Python實現(xiàn)。

遺傳算法的要

適應度函數(shù)

適應度函數(shù)衡量所考慮的解決方案與問題的最佳解決方案的接近程度。它為人中的每個人提供了適應度水平,描述了當前一代的質(zhì)量或效率。這個分定義了選擇,更高的適應度值是經(jīng)過優(yōu)化的解決方案。

比如說,假設我們在處理一個實際的函數(shù)f(x)其中x是一組參數(shù)。要找到的最優(yōu)值是x,這樣f(x)就取最大值。

選擇

過程決定了當前一代中哪些個體受到青睞,從而繁殖為下一代做出貢獻。可以確定許多選擇方法,每種方法都有自己的特點和適合的上下文。

  • 盤選擇

根據(jù)個體的適應度水平,選擇個體的概率也是最大的。

  • 錦標賽選擇

隨機抽取一組,選其中最好的。

  • 基于排序的選擇

根據(jù)適合度對人進行排序,選擇機會根據(jù)適合度分數(shù)按比例分配。

交叉

交叉是遺傳算法的一個基本概念,其目的是交換兩個親本的遺傳信息,形成一個或多個后代。這個過程非常類似自然界中發(fā)生的生物的交叉和重組。運用遺傳的基本原理,交叉試圖產(chǎn)生具有雙親理想特征的后代,從而在下一代中有更好的適應性。交叉是一個比較寬泛的概念,可以分為幾種類型,每種類型都有其特點和可以有效運用的領域。

  • 單點交叉在親本染色體上選擇一個交叉點,實際上只發(fā)生一次交叉。這個位置之前的所有基因都取自第一個親本,而這個位置之后的所有基因都取自第二個親本。
  • 兩點交叉選擇兩個斷點,它們之間的部分在兩個親本染色體之間交換。它也有利于遺傳信息的交換,這與單點交叉不一樣。

突變

在遺傳算法中,突變之所以至關(guān)重要,是由于它提供了多樣性,多樣性是避免直接向最優(yōu)解區(qū)收斂的關(guān)鍵因素。因此,獲得單個突變基因隨機變化,算法可以進入僅通過交叉操作無法企及最優(yōu)空間的其他區(qū)域。這隨機過程保證了無論怎樣群都會進化,或者在遺傳算法確定的搜索空間區(qū)域內(nèi)移動其位置。

實現(xiàn)遺傳算法的步驟

不妨用Python實現(xiàn)遺傳算法。

問題定義

問題對具體函數(shù)進行計算;f (x) = x^2f(x) = x^2x取整

適應度函數(shù)對于染色體二進制為x的情況,適應度函數(shù)的一個例子可f(x)= x^2


def fitness(chromosome):
  x = int(''.join(map(str, chromosome)), 2)
 return x ** 2

群初始化

生成一個給定長度的隨機染色體。

def generate_chromosome(length):
 return [random.randint(0, 1) for _ in range(length)]

def generate_population(size, chromosome_length):
 return [generate_chromosome(chromosome_length) for _ in range(size)]

population_size = 10
chromosome_length = 5
population = generate_population(population_size, chromosome_length)

適應度評估

評估人群中每染色體的適應度。

fitnesses = [fitness(chromosome) for chromosome in population]

選擇

使用輪盤選擇根據(jù)適合度選擇親本染色體。


def select_pair(population, fitnesses):
   total_fitness = sum(fitnesses)
 selection_probs = [f / total_fitness for f in fitnesses]
   parent1 = population[random.choices(range(len(population)), selection_probs)[0]]
 parent2 = population[random.choices(range(len(population)), selection_probs)[0]]
 return parent1, parent2

交叉

使用單點交叉,在父本基因串中選擇一個隨機的交叉位置,并在兩個基因串之間交換這個位置之后的所有基因值。

def crossover(parent1, parent2):
 point = random.randint(1, len(parent1) - 1)
 offspring1 = parent1[:point] + parent2[point:]
 offspring2 = parent2[:point] + parent1[point:]
 return offspring1, offspring2

突變

通過以一定的概率翻轉(zhuǎn)比特來實現(xiàn)突變。

def mutate(chromosome, mutation_rate):
 return [gene if random.random() > mutation_rate else 1 - gene for gene in chromosome]

mutation_rate = 0.01

結(jié)

總之由于模擬物種進化遺傳算法對于解決無法直接解決的優(yōu)化問題具有一致性和有效性。因此,一旦掌握了遺傳算法的基本要素了解了如何Python實現(xiàn)遺傳算法,解決復雜任務就會容易得多。選擇、交叉和突變使您能夠?qū)鉀Q方案進行修改,并不斷獲得最佳或接近最佳的答案。但愿您已準備好將遺傳算法運用到自己的任務中,從而在不同的任務和問題解決中得到改進。

原文標題:Understanding and Implementing Genetic Algorithms in Python,作者:Jayita Gulati


責任編輯:華軒 來源: 51CTO
相關(guān)推薦

2025-01-16 07:10:00

2017-11-16 15:25:54

Go語言算法代碼

2021-03-16 11:30:33

2020-06-11 08:32:50

Python遺傳算法代碼

2017-09-22 15:03:08

Python遺傳算法GAFT框架

2024-09-12 10:06:21

2021-03-10 15:49:20

人工智能遺傳算法

2017-08-21 10:00:23

遺傳算法Python生物學

2017-08-03 10:05:01

Python遺傳算法GAFT

2025-06-19 02:11:00

2020-10-26 13:42:28

Python算法垃圾

2017-07-12 14:23:25

遺傳算法java自然選擇

2009-08-14 09:41:03

C#遺傳算法

2017-10-17 14:25:56

機器學習算法優(yōu)化

2014-11-28 16:08:33

射頻識別RFID

2010-05-11 11:00:44

遺傳算法宋詞

2017-09-22 14:12:04

AI

2011-01-19 11:14:45

程序員

2024-07-15 08:00:00

2017-10-27 18:20:59

程序員
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久久精 | 亚洲天堂二区 | 成人久久18免费网站麻豆 | 国产精品一区二区三区99 | 天天摸天天干 | 福利视频网址 | 国产一区二区久久 | 成人蜜桃av | 性一交一乱一透一a级 | 毛片免费看 | 亚洲精品天堂 | 久久久国产一区二区三区四区小说 | av在线一区二区三区 | 免费a大片 | 欧美精品成人影院 | 亚洲国产精品久久久久秋霞不卡 | 欧美另类视频 | 91视视频在线观看入口直接观看 | 日韩高清在线观看 | 毛片区 | 成人欧美一区二区三区1314 | 久久y | 国产福利小视频 | 精品国产精品三级精品av网址 | 男人的天堂亚洲 | 日韩一区二区三区在线观看视频 | 久久久久久久久久久成人 | 国产免费福利小视频 | 91久久久久久| 999免费视频 | 欧美在线视频观看 | 羞羞视频免费在线 | 亚洲视频在线一区 | 一区二区视频在线 | 久久久国产一区二区三区四区小说 | 欧美精品一区二区免费视频 | 精品久久久久久红码专区 | 视频一区二区中文字幕日韩 | 狠狠躁夜夜躁人人爽天天高潮 | 秋霞在线一区 | 91视视频在线观看入口直接观看 |