人工智能十大算法 遗传算法,人工智能遗传算法的基本原理

  人工智能十大算法 遗传算法,人工智能遗传算法的基本原理

  本文主要为大家介绍AI和Python人工智能遗传算法的详细讲解教程。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010什么是遗传算法?如何用GA进行优化?在机构优化阶段,安装必要的软件包,利用遗传算法实现求解。本章详细讨论了人工智能的遗传算法。

  

目录

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

  由密歇根大学的加霍兰德和他的学生及同事开发的,其中最著名的是大卫e戈德堡。此后尝试了各种优化问题,取得了巨大成功。

  在遗传算法中,我们有一组可能的解决方案来解决一个给定的问题。然后这些解经过重组和突变(就像在自然遗传学中一样)产生新的子代,这个过程重复很多代。给每个个体(或候选解)分配一个适应值(基于其目标函数值),使更健康的个体有更高的机会交配产生更健康的个体。这符合达尔文的适者生存理论。

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

  遗传算法天生就足够随机,但它们比随机局部搜索(我们只是尝试随机解决方案并跟踪迄今为止的最佳解决方案)的性能更好,因为它们还利用了历史信息。

  

什么是遗传算法?

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

  

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

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

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

  

GA机制优化过程的阶段

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

  pip安装程序

  如果您正在使用anaconda环境,您可以使用下面的命令来安装deap-

  康达安装-康达锻造deap

  

安装必要的软件包

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

  

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

  下面的例子显示了如何基于一个最大值问题生成15个字符串的位串。

  如图所示导入必要的包-

  随机导入

  从deap导入基础、创建者、工具

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

  def eval_func(个人):

  target_sum=15

  return len(个人)- abs(sum(个人)- target_sum),

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

  def create_toolbox(位数):

  creator.create(FitnessMax ,base。健身,体重=(1.0,)

  creator.create(个人,列表,健身=创建者。FitnessMax)

  初始化工具箱

  ush:py;">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遗传算法的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • chatgpt是什么?为什么这么火?
  • 如何看待马斯克等全球千名科技人士联名呼吁暂停更强大的AI开发?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • Tiamat人工智能绘画网站,Tiamat自动作图生成器,网址是多少?
  • 盗梦师人工智能绘画网站,盗梦师自动作图生成器,网址是多少?
  • 无界版图人工智能绘画网站,无界版图自动作图生成器,网址是多少?
  • 滴墨社区人工智能绘画网站,滴墨社区自动作图生成器,网址是多少?
  • draft.art官网网址是多少?Draft人工智能绘画网站,Draft art自动作图生成器
  • 6pen.art人工智能绘画网站,6pen.art自动作图生成器,网址是多少?
  • 文心一格人工智能绘画网站,文心一格自动作图生成器,网址是多少?
  • NovelAI人工智能绘画网站,NovelAI自动作图生成器,网址是多少?
  • Parti人工智能绘画网站,Parti自动作图生成器,网址是多少?
  • Disco Diffusion 人工智能绘画网站,Disco Diffusion 自动作图生成器,网址是多少?
  • 留言与评论(共有 条评论)
       
    验证码: