最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AI與Python人工智能遺傳算法

 更新時(shí)間:2022年05月23日 09:08:51   作者:weixin_42238387  
這篇文章主要為大家介紹了AI與Python人工智能遺傳算法的詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

本章詳細(xì)討論了人工智能的遺傳算法。

什么是遺傳算法?

遺傳算法(GA)是基于自然選擇和遺傳概念的基于搜索的算法。GA是更大的計(jì)算分支的子集,稱為進(jìn)化計(jì)算。

GA由John Holland及其密歇根大學(xué)的學(xué)生和同事開發(fā),最著名的是David E. Goldberg。從那以后,已經(jīng)嘗試了各種優(yōu)化問題并取得了很大的成功。

在GA中,我們有一組可能的解決方案來解決給定的問題。然后這些溶液經(jīng)歷重組和突變(如在天然遺傳學(xué)中),產(chǎn)生新的兒童,并且該過程重復(fù)多代。為每個(gè)個(gè)體(或候選解決方案)分配適合度值(基于其目標(biāo)函數(shù)值),并且使得更健康的個(gè)體具有更高的交配和產(chǎn)生更健康的個(gè)體的機(jī)會(huì)。這符合達(dá)爾文適者生存理論。

因此,它不斷發(fā)展更好的個(gè)人或解決方案,直到它達(dá)到停止標(biāo)準(zhǔn)。

遺傳算法在本質(zhì)上具有足夠的隨機(jī)性,但它們比隨機(jī)局部搜索(我們只是嘗試隨機(jī)解決方案,跟蹤迄今為止的最佳解決方案)表現(xiàn)得更好,因?yàn)樗鼈円怖昧藲v史信息。

如何使用GA進(jìn)行優(yōu)化問題?

優(yōu)化是使設(shè)計(jì),情境,資源和系統(tǒng)盡可能有效的行動(dòng)。以下框圖顯示了優(yōu)化過程 -

GA機(jī)制優(yōu)化過程的階段

以下是用于優(yōu)化問題的GA機(jī)制的一系列步驟。

  • 第1步 - 隨機(jī)生成初始種群。
  • 第2步 - 選擇具有最佳適合度值的初始解決方案。
  • 步驟3 - 使用突變和交叉算子重新組合所選解決方案。
  • 第4步 - 將后代插入人口。
  • 步驟5 - 現(xiàn)在,如果滿足停止條件,則返回具有最佳適合度值的解決方案。否則轉(zhuǎn)到第2步。

安裝必要的軟件包

為了通過Python中的遺傳算法解決問題,我們將使用一個(gè)名為DEAP的功能強(qiáng)大的GA包。它是一個(gè)新的進(jìn)化計(jì)算框架庫,用于快速原型設(shè)計(jì)和思想測(cè)試。我們可以在命令提示符下使用以下命令安裝此軟件包 -

pip install deap

如果您使用的是anaconda環(huán)境,則可以使用以下命令安裝deap -

conda install -c conda-forge deap

使用遺傳算法實(shí)現(xiàn)解決方案

本節(jié)將介紹使用遺傳算法實(shí)現(xiàn)解決方案的過程。

生成位模式

以下示例顯示如何根據(jù)One Max問題生成包含15個(gè)字符串的位字符串。

如圖所示導(dǎo)入必要的包 -

import random
from deap import base, creator, tools

定義評(píng)估功能。這是創(chuàng)建遺傳算法的第一步。

def eval_func(individual):
   target_sum = 15
   return len(individual) - abs(sum(individual) - target_sum),

現(xiàn)在,使用正確的參數(shù)創(chuàng)建工具箱 -

def create_toolbox(num_bits):
   creator.create("FitnessMax", base.Fitness, weights=(1.0,))
   creator.create("Individual", list, fitness=creator.FitnessMax)

初始化工具箱

toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual,
   toolbox.attr_bool, num_bits)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

注冊(cè)評(píng)估運(yùn)營商 -

toolbox.register("evaluate", eval_func)

現(xiàn)在,注冊(cè)交叉運(yùn)算符 -

toolbox.register("mate", tools.cxTwoPoint)

注冊(cè)變異算子 -

toolbox.register("mutate", tools.mutFlipBit, indpb = 0.05)

定義繁殖的運(yùn)營商 -

toolbox.register("select", tools.selTournament, tournsize = 3)
return toolbox
if __name__ == "__main__":
   num_bits = 45
   toolbox = create_toolbox(num_bits)
   random.seed(7)
   population = toolbox.population(n = 500)
   probab_crossing, probab_mutating = 0.5, 0.2
   num_generations = 10
   print('\nEvolution process starts')

評(píng)估整個(gè)人口 -

fitnesses = list(map(toolbox.evaluate, population))
for ind, fit in zip(population, fitnesses):
   ind.fitness.values = fit
print('\nEvaluated', len(population), 'individuals')

創(chuàng)造和迭代幾代人 -

for g in range(num_generations):
   print("\n- Generation", g)

選擇下一代個(gè)人 -

offspring = toolbox.select(population, len(population))

現(xiàn)在,克隆選定的個(gè)人 -

offspring = list(map(toolbox.clone, offspring))

在后代上應(yīng)用交叉和變異 -

for child1, child2 in zip(offspring[::2], offspring[1::2]):
   if random.random() < probab_crossing:
   toolbox.mate(child1, child2)

刪除孩子的健身價(jià)值

del child1.fitness.values
del child2.fitness.values

現(xiàn)在,應(yīng)用變異 -

for mutant in offspring:
   if random.random() < probab_mutating:
   toolbox.mutate(mutant)
   del mutant.fitness.values

評(píng)估健康狀況不佳的人 -

invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
   ind.fitness.values = fit
print('Evaluated', len(invalid_ind), 'individuals')

現(xiàn)在,用下一代個(gè)人取代人口 -

population[:] = offspring

打印當(dāng)前世代的統(tǒng)計(jì)數(shù)據(jù) -

fits = [ind.fitness.values[0] for ind in population]
length = len(population)
mean = sum(fits) / length
sum2 = sum(x*x for x in fits)
std = abs(sum2 / length - mean**2)**0.5
print('Min =', min(fits), ', Max =', max(fits))
print('Average =', round(mean, 2), ', Standard deviation =',
round(std, 2))
print("\n- Evolution ends")

打印最終輸出 -

 best_ind = tools.selBest(population, 1)[0]
   print('\nBest individual:\n', best_ind)
   print('\nNumber of ones:', sum(best_ind))
Following would be the output:
Evolution process starts
Evaluated 500 individuals
- Generation 0
Evaluated 295 individuals
Min = 32.0 , Max = 45.0
Average = 40.29 , Standard deviation = 2.61
- Generation 1
Evaluated 292 individuals
Min = 34.0 , Max = 45.0
Average = 42.35 , Standard deviation = 1.91
- Generation 2
Evaluated 277 individuals
Min = 37.0 , Max = 45.0
Average = 43.39 , Standard deviation = 1.46
… … … …
- Generation 9
Evaluated 299 individuals
Min = 40.0 , Max = 45.0
Average = 44.12 , Standard deviation = 1.11
- Evolution ends
Best individual:
[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 
 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0,
 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1]
Number of ones: 15

符號(hào)回歸問題

這是遺傳編程中最著名的問題之一。所有符號(hào)回歸問題都使用任意數(shù)據(jù)分布,并嘗試使用符號(hào)公式擬合最準(zhǔn)確的數(shù)據(jù)。通常,像RMSE(均方根誤差)這樣的度量用于衡量個(gè)體的適應(yīng)度。這是一個(gè)經(jīng)典的回歸問題,在這里我們使用等式5x 3 -6x 2 + 8x = 1。我們需要遵循上面示例中的所有步驟,但主要部分是創(chuàng)建原始集,因?yàn)樗鼈兪莻€(gè)人的構(gòu)建塊,因此評(píng)估可以開始。在這里,我們將使用經(jīng)典的基元集。

以下Python代碼詳細(xì)解釋了這一點(diǎn) -

import operator
import math
import random
import numpy as np
from deap import algorithms, base, creator, tools, gp
def division_operator(numerator, denominator):
   if denominator == 0:
      return 1
   return numerator / denominator
def eval_func(individual, points):
   func = toolbox.compile(expr=individual)
   return math.fsum(mse) / len(points),
def create_toolbox():
   pset = gp.PrimitiveSet("MAIN", 1)
   pset.addPrimitive(operator.add, 2)
   pset.addPrimitive(operator.sub, 2)
   pset.addPrimitive(operator.mul, 2)
   pset.addPrimitive(division_operator, 2)
   pset.addPrimitive(operator.neg, 1)
   pset.addPrimitive(math.cos, 1)
   pset.addPrimitive(math.sin, 1)
   pset.addEphemeralConstant("rand101", lambda: random.randint(-1,1))
   pset.renameArguments(ARG0 = 'x')
   creator.create("FitnessMin", base.Fitness, weights = (-1.0,))
   creator.create("Individual",gp.PrimitiveTree,fitness=creator.FitnessMin)
   toolbox = base.Toolbox()
   toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=1, max_=2)
   toolbox.expr)
   toolbox.register("population",tools.initRepeat,list, toolbox.individual)
   toolbox.register("compile", gp.compile, pset = pset)
   toolbox.register("evaluate", eval_func, points = [x/10. for x in range(-10,10)])
   toolbox.register("select", tools.selTournament, tournsize = 3)
   toolbox.register("mate", gp.cxOnePoint)
   toolbox.register("expr_mut", gp.genFull, min_=0, max_=2)
   toolbox.register("mutate", gp.mutUniform, expr = toolbox.expr_mut, pset = pset)
   toolbox.decorate("mate", gp.staticLimit(key = operator.attrgetter("height"), max_value = 17))
   toolbox.decorate("mutate", gp.staticLimit(key = operator.attrgetter("height"), max_value = 17))
   return toolbox
if __name__ == "__main__":
   random.seed(7)
   toolbox = create_toolbox()
   population = toolbox.population(n = 450)
   hall_of_fame = tools.HallOfFame(1)
   stats_fit = tools.Statistics(lambda x: x.fitness.values)
   stats_size = tools.Statistics(len)
   mstats = tools.MultiStatistics(fitness=stats_fit, size = stats_size)
   mstats.register("avg", np.mean)
   mstats.register("std", np.std)
   mstats.register("min", np.min)
   mstats.register("max", np.max)
   probab_crossover = 0.4
   probab_mutate = 0.2
   number_gen = 10
   population, log = algorithms.eaSimple(population, toolbox,
      probab_crossover, probab_mutate, number_gen,
      stats = mstats, halloffame = hall_of_fame, verbose = True)

請(qǐng)注意,所有基本步驟與生成位模式時(shí)使用的步驟相同。該程序?qū)⒃?0代之后給出輸出為min,max,std(標(biāo)準(zhǔn)偏差)。

以上就是AI與Python人工智能遺傳算法的詳細(xì)內(nèi)容,更多關(guān)于AI Python遺傳算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作

    python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作

    這篇文章主要介紹了python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python函數(shù)傳參意義示例詳解

    python函數(shù)傳參意義示例詳解

    這篇文章主要為大家介紹了關(guān)于python函數(shù)傳參的意義示例詳解,有需要的朋友可以借鑒參考下,希望可以加深各位同學(xué)對(duì)Python傳參的理解
    2021-10-10
  • 關(guān)于python基礎(chǔ)數(shù)據(jù)類型bytes進(jìn)制轉(zhuǎn)換

    關(guān)于python基礎(chǔ)數(shù)據(jù)類型bytes進(jìn)制轉(zhuǎn)換

    Python 3.x之后,Python自帶字符默認(rèn)使用utf-8格式編碼和顯示,bytes數(shù)據(jù)類型是utf-8格式的二進(jìn)制形式的不可變序列,需要的朋友可以參考下
    2023-05-05
  • 使用Python實(shí)現(xiàn)租車計(jì)費(fèi)系統(tǒng)的兩種方法

    使用Python實(shí)現(xiàn)租車計(jì)費(fèi)系統(tǒng)的兩種方法

    本文通過兩種方法給大家分享了使用Python實(shí)現(xiàn)租車計(jì)費(fèi)系統(tǒng),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Python3.6簡單反射操作示例

    Python3.6簡單反射操作示例

    這篇文章主要介紹了Python3.6簡單反射操作,結(jié)合實(shí)例形式分析了Python3反射的概念、原理、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • Python中os.path用法分析

    Python中os.path用法分析

    這篇文章主要介紹了Python中os.path用法,實(shí)例分析了os.path的各種常用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • 教大家玩轉(zhuǎn)Python字符串處理的七種技巧

    教大家玩轉(zhuǎn)Python字符串處理的七種技巧

    這篇文章主要給大家介紹了關(guān)于學(xué)會(huì)Python字符串處理的七種技巧,其中包括字符串的連接和合并、字符串的切片和相乘、字符串的分割、字符串的開頭和結(jié)尾的處理、字符串的查找和匹配、字符串的替換以及字符串中去掉一些字符等操作,需要的朋友可以參考。
    2017-03-03
  • Python幫你解決手機(jī)qq微信內(nèi)存占用太多問題

    Python幫你解決手機(jī)qq微信內(nèi)存占用太多問題

    你有沒有發(fā)現(xiàn)以前16G內(nèi)存也可以裝幾個(gè)游戲玩,現(xiàn)在128G的卻日常使用都不夠了?更不用說裝什么游戲,這其實(shí)是軟件內(nèi)存占用過多導(dǎo)致的,今天我們用python來清理下
    2022-02-02
  • Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解

    Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解

    多態(tài)性通常在類的方法中使用,其中我們可以具有相同方法名稱的多個(gè)類,本文給大家介紹Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解,需要的朋友可以參考下
    2023-10-10
  • Ubuntu16.04/樹莓派Python3+opencv配置教程(分享)

    Ubuntu16.04/樹莓派Python3+opencv配置教程(分享)

    下面小編就為大家分享一篇Ubuntu16.04/樹莓派Python3+opencv配置教程。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論

云龙县| 涿州市| 镇巴县| 海门市| 庐江县| 电白县| 浙江省| 武定县| 和林格尔县| 金坛市| 团风县| 长海县| 莎车县| 通辽市| 射洪县| 合阳县| 清河县| 西丰县| 天门市| 元朗区| 富平县| 望都县| 张家口市| 西乡县| 鄂温| 雷州市| 扶风县| 沁阳市| 南岸区| 商南县| 陕西省| 潼关县| 左贡县| 修文县| 西峡县| 彩票| 商水县| 南部县| 民县| 黔江区| 怀宁县|