AI与Python人工智能遗传算法

目录
  • 什么是遗传算法?
  • 如何使用GA进行优化问题?
    • GA机制优化过程的阶段
  • 安装必要的软件包
  • 使用遗传算法实现解决方案
    • 生成位模式
    • 符号回归问题

本章详细讨论了人工智能的遗传算法。

什么是遗传算法?

遗传算法(GA)是基于自然选择和遗传概念的基于搜索的算法。GA是更大的计算分支的子集,称为进化计算。

GA由John Holland及其密歇根大学的学生和同事开发,最着名的是David E. Goldberg。从那以后,已经尝试了各种优化问题并取得了很大的成功。

在GA中,我们有一组可能的解决方案来解决给定的问题。然后这些溶液经历重组和突变(如在天然遗传学中),产生新的儿童,并且该过程重复多代。为每个个体(或候选解决方案)分配适合度值(基于其目标函数值),并且使得更健康的个体具有更高的交配和产生更健康的个体的机会。这符合达尔文适者生存理论。

因此,它不断发展更好的个人或解决方案,直到它达到停止标准。

遗传算法在本质上具有足够的随机性,但它们比随机局部搜索(我们只是尝试随机解决方案,跟踪迄今为止的最佳解决方案)表现得更好,因为它们也利用了历史信息。

如何使用GA进行优化问题?

优化是使设计,情境,资源和系统尽可能有效的行动。以下框图显示了优化过程 -

GA机制优化过程的阶段

以下是用于优化问题的GA机制的一系列步骤。

  • 第1步 - 随机生成初始种群。
  • 第2步 - 选择具有最佳适合度值的初始解决方案。
  • 步骤3 - 使用突变和交叉算子重新组合所选解决方案。
  • 第4步 - 将后代插入人口。
  • 步骤5 - 现在,如果满足停止条件,则返回具有最佳适合度值的解决方案。否则转到第2步。

安装必要的软件包

为了通过Python中的遗传算法解决问题,我们将使用一个名为DEAP的功能强大的GA包。它是一个新的进化计算框架库,用于快速原型设计和思想测试。我们可以在命令提示符下使用以下命令安装此软件包 -

pip install deap

如果您使用的是anaconda环境,则可以使用以下命令安装deap -

conda install -c conda-forge deap

使用遗传算法实现解决方案

本节将介绍使用遗传算法实现解决方案的过程。

生成位模式

以下示例显示如何根据One Max问题生成包含15个字符串的位字符串。

如图所示导入必要的包 -

import random
from deap import base, creator, tools

定义评估功能。这是创建遗传算法的第一步。

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

现在,使用正确的参数创建工具箱 -

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)

注册评估运营商 -

toolbox.register("evaluate", eval_func)

现在,注册交叉运算符 -

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

注册变异算子 -

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

定义繁殖的运营商 -

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')

评估整个人口 -

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

创造和迭代几代人 -

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

选择下一代个人 -

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

现在,克隆选定的个人 -

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

在后代上应用交叉和变异 -

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

删除孩子的健身价值

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

现在,应用变异 -

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

评估健康状况不佳的人 -

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')

现在,用下一代个人取代人口 -

population[:] = offspring

打印当前世代的统计数据 -

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

符号回归问题

这是遗传编程中最着名的问题之一。所有符号回归问题都使用任意数据分布,并尝试使用符号公式拟合最准确的数据。通常,像RMSE(均方根误差)这样的度量用于衡量个体的适应度。这是一个经典的回归问题,在这里我们使用等式5x 3 -6x 2 + 8x = 1。我们需要遵循上面示例中的所有步骤,但主要部分是创建原始集,因为它们是个人的构建块,因此评估可以开始。在这里,我们将使用经典的基元集。

以下Python代码详细解释了这一点 -

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)

请注意,所有基本步骤与生成位模式时使用的步骤相同。该程序将在10代之后给出输出为min,max,std(标准偏差)。

以上就是AI与Python人工智能遗传算法的详细内容,更多关于AI Python遗传算法的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python调用百度AI实现颜值评分功能

    目录 一.调用百度接口进行人脸属性识别 二.根据年龄和性别对颜值进行评价 三.批量识别人脸属性 四.自定义窗口语音播报颜值得分 五.明星颜值评价 一.调用百度接口进行人脸属性识别 安装好baidu-aip模块,获取了百度AI接口密钥后,即可调用百度接口进行人脸属性识别了.首先以杨紫的图片为例进行年龄.性别.颜值的识别. 具体python代码如下:‍ import os import base64 from aip import AipFace os.chdir(r'F:\公众号\28.人脸识别'

  • Python调用百度AI实现人像分割详解

    目录 一.原始视频截图 二.提取人像 三.和背景图合并 四.合成视频 一.原始视频截图 import cv2 cap=cv2.VideoCapture(r"[小仙若]shake it !冬日也要活力满满! (P1. shake it).mp4") ret,frame=cap.read() i =0 timeF=3 j=0 num=0 while 1: i=i+1 if (i%timeF==0): j=j+1 cv2.imwrite("./pictures/"+str

  • AI与Python人工智能启发式搜索概念理解

    目录 AI中的启发式搜索的概念 不知情和知情搜索之间的区别 不知情的搜索 知情搜索 约束满足问题(CSP) 约束满足解决现实问题 解决代数关系 魔术广场 启发式搜索在人工智能中起着关键作用.在本章中,您将详细了解它. AI中的启发式搜索的概念 启发式是一个经验法则,它引导我们找到可能的解决方案.人工智能中的大多数问题具有指数性,并且具有许多可能的解决方案.您不确切知道哪些解决方案是正确的,并且检查所有解决方案将非常昂贵. 因此,启发式的使用缩小了对解决方案的搜索范围并消除了错误的选项.使用启发式

  • Python与AI分析时间序列数据

    目录 简介 序列分析或时间序列分析的基本概念 安装实用软件包 Pandas hmmlearn PyStruct CVXOPT Pandas:处理,切片和从时间序列数据中提取统计数据 示例 处理时间序列数据 切片时间序列数据 提取来自时间序列数据的统计数据 平均值 最大值 最小值 一次性获取所有内容 重新采样 使用mean()重新采样 Re -sampling with median() 滚动平均值 通过隐马尔可夫分析顺序数据模型(HMM) 隐马尔可夫模型(HMM) 状态(S) 输出符号(O) 状

  • Python调用百度AI实现身份证识别

    目录 一.安装baidu-aip模块 二.获取百度AI接口密钥 三.调用百度接口识别身份证 一.安装baidu-aip模块 按win+R打开cmd,在里面输入 pip3 install baidu-aip 若出现如下界面,即成功安装了baidu-aip模块: 如果想快速了解识别营业执照代码原理,可以跳过第二部分,先看第三部分的内容. 二.获取百度AI接口密钥 在应用python识别身份证的过程中,有三行代码使用了百度AI接口密钥,故先阐述如何获得该密钥.首先,进入如下百度AI官方网站:https

  • AI与Python人工智能遗传算法

    目录 什么是遗传算法? 如何使用GA进行优化问题? GA机制优化过程的阶段 安装必要的软件包 使用遗传算法实现解决方案 生成位模式 符号回归问题 本章详细讨论了人工智能的遗传算法. 什么是遗传算法? 遗传算法(GA)是基于自然选择和遗传概念的基于搜索的算法.GA是更大的计算分支的子集,称为进化计算. GA由John Holland及其密歇根大学的学生和同事开发,最着名的是David E. Goldberg.从那以后,已经尝试了各种优化问题并取得了很大的成功. 在GA中,我们有一组可能的解决方案来

  • python人工智能遗传算法示例解析

    目录 一.实验目的 二.实验原理 三.实验条件 四.实验内容 五.实验结果 一.实验目的 熟悉和掌握遗传算法的原理.流程和编码策略,并利用遗传求解函数优化问题,理解求解流程并测试主要参数对结果的影响. 二.实验原理 遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程.它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体.这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和个体组成的群体.后代随机化地继承了父代的最好特征

  • 人工智能(AI)首选Python的原因解析

    一.为何人工智能(AI)首选Python? 读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python,其他语言一般只有几千行 .如果讲运行速度的部分,用C++,如果讲开发效率,用Python,谁会用Java这种高不成低不就的语言搞人工智能呢? Python虽然是脚本语言,但是因为容易学,迅速成为科学家的工具(MATLAB也能搞科学计算,但是软件要钱,且很贵),从而积累了大量的工具库.架构,人工智能涉及大量的数据计算,用Python是很自然的,简单高效. P

  • 为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)

    为何人工智能(AI)首选Python?读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python,其他语言一般只有几千行 .如果讲运行速度的部分,用C++,如果讲开发效率,用Python,谁会用Java这种高不成低不就的语言搞人工智能呢?Python虽然是脚本语言,但是因为容易学,迅速成为科学家的工具(MATLAB也能搞科学计算,但是软件要钱,且很贵),从而积累了大量的工具库.架构,人工智能涉及大量的数据计算,用Python是很自然的,简单高效.Python

  • Python人工智能语音合成实现案例详解

    目录 正文 一. 注册百度AI平台应用 二. 编写Python代码 正文 今天给大家介绍一下基于百度的AI语音技术SDK实现语音合成的案例,编程语言采用Python,希望对大家能有所帮助! 一. 注册百度AI平台应用 ai.baidu.com/ 首先登陆自己的百度账户,打开百度的AI开发平台页面 搜索找到离线语音合成,然后点击立即使用,进入百度智能云页面. 创建应用选择语音技术,默认为全部勾选 创建后可以在应用列表可以看到刚刚创建的语音应用. 主要信息是AppID.API Key.Secret

  • Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现

    简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能中的另一项技术: 自然语言处理(NLP) : 大概意思就是 让计算机明白一句话要表达的意思,NLP就相当于计算机在思考你说的话,让计算机知道"你是谁","你叫啥","你叫什么名字"是一个意思 这就要做 : 语义相似度 接下来我们用Python大法来实

  • Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答

    Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不去了解其他的功能,只了解一下它如何实现录音的 首先要先 pip 一个 PyAudio pip install pyaudio 一.PyAudio 实现麦克风录音 然后建立一个py文件,复制如下代码 import pyaudio import wave CHUNK = 1024 FORMAT = py

  • Python实现遗传算法(二进制编码)求函数最优值方式

    目标函数 编码方式 本程序采用的是二进制编码精确到小数点后五位,经过计算可知对于 其编码长度为18,对于 其编码长度为15,因此每个基于的长度为33. 参数设置 算法步骤 设计的程序主要分为以下步骤:1.参数设置:2.种群初始化:3.用轮盘赌方法选择其中一半较好的个体作为父代:4.交叉和变异:5.更新最优解:6.对最有个体进行自学习操作:7结果输出.其算法流程图为: 算法结果 由程序输出可知其最终优化结果为38.85029, 输出基因编码为[1 1 0 0 1 0 1 1 1 1 1 1 1 0

  • Python人工智能之波士顿房价数据分析

    目录 1.数据概览分析 1.1 数据概览 1.2 数据分析 2. 项目总体思路 2.1 数据读取 2.2 模型预处理 (1)数据离群点处理 (2)数据归一化处理 2.3. 特征工程 2.4. 模型选择 2.5. 模型评价 2.6. 模型调参 3. 项目总结 [人工智能项目]机器学习热门项目-波士顿房价 1.数据概览分析 1.1 数据概览 本次提供: train.csv,训练集: test.csv,测试集: submission.csv 真实房价文件: 训练集404行数据,14列,每行数据表示房屋

随机推荐