文章编号:2710 /
分类:
技术教程 /
更新时间:2024-05-17 14:45:07 / 浏览:
次
恭喜您成为首批注册用户
本节向您介绍使用遗传算法实现解决方案。
以下示例显示了如何根据OneMax问题生成一个包含15个字符串的位串。
如下所示导入必要的软件包-
importrandomfromdeapimportbase,creator,tools定义评估函数。这是创建遗传算法的第一步。
defeval_func(individual):target_sum=15returnlen(individual)-abs(sum(individual)-target_sum)现在,使用正确的参数创建工具箱-
toolbox.register("evaluate",eval_func)现在,注册交叉运算符-
toolbox.register("mate",tools.cxTwoPoint)注册一个可变运算符-
fitnesses=list(map(toolbox.evaluate,population))forind,fitinzip(population,fitnesses):ind.fitness.values=fitprint('\nEvaluated',len(population),'individuals')经过几代人的创建和迭代-
offspring=toolbox.select(population,len(population))现在,克隆选定的个人-
offspring=list(map(toolbox.clone,offspring))对后代应用交叉和变异-
forchild1,child2inzip(offspring[::2],offspring[1::2]):ifrandom.random()删除孩子的适应值
formutantinoffspring:ifrandom.random()评估与无效的健身个体-
population[:]=offspring打印当代人的统计数据-
这是遗传编程中最著名的问题之一。所有符号回归问题都使用任意数据分布,并尝试用符号公式来拟合最准确的数据。通常,像RMSE(均方根误差)这样的度量用于度量个体的适应度。这是一个经典的回归问题,这里我们使用方程:5x3-6x28x=1。我们需要按照上述示例中的所有步骤进行操作,但主要部分是创建基元集,因为它们是个人的构建基块,因此可以开始评估。这里将使用经典的基元集。
以下Python代码详细解释了这一点-
importoperatorimportmathimportrandomimportnumpyasnpfromdeapimportalgorithms,base,creator,tools,gpdefdivision_operator(numerator,denominator):ifdenominator==0:return1returnnumerator/denominatordefeval_func(individual,points):func=toolbox.compile(expr=individual)returnmath.fsum(mse)/len(points),defcreate_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.forxinrange(-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))returntoolboxif__name__=="__main__":random.seed(7)toolbox=create_toolbox()population=toolbox.population(n=450)hall_of_fame=tools.HallOfFame(1)stats_fit=tools.Statistics(lambdax: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.4probab_mutate=0.2number_gen=10population,log=algorithms.eaSimple(population,toolbox,probab_crossover,probab_mutate,number_gen,stats=mstats,halloffame=hall_of_fame,verbose=True)以上内容是否对您有帮助:在文档使用的过程中是否遇到以下问题:

更多建议:
违法和不良信息举报电话:173-0602-2364|
相关标签:
AI人工智能使用遗传算法实现解决方案、 本文地址:https://www.badfl.com/article/ea7f3610e7aa4573aeb9.html
上一篇:AI人工智能读取,写入和显示图像...
下一篇:AI人工智能遗传算法概述...