无名商城论坛

搜索
查看: 240|回复: 0

[其他技术] 【LSP】【python(deap库)实现】GEAP 遗传算法/

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:01:53 | 显示全部楼层 |阅读模式


前言
本文不介绍原理的东西,主要是实现进化算法的python实现。
原理介绍可以看这里,能学习要很多,我也在这里写了一些感受心得:
遗传算法/遗传编程 进化算法基于python DEAP库深度解析讲解

1.优化问题的定义
单目标优化
creator.create('FitnessMin', base.Fitness, weights=(-1.0, ))
在创建单目标优化问题时,weights用来指示最大化和最小化。此处-1.0即代表问题是一个最小化问题,对于最大化,应将weights改为正数,如1.0。

另外即使是单目标优化,weights也需要是一个tuple,以保证单目标和多目标优化时数据结构的统一。

对于单目标优化问题,weights 的绝对值没有意义,只要符号选择正确即可。

多目标优化
creator.create('FitnessMulti', base.Fitness, weights=(-1.0, 1.0))
对于多目标优化问题,weights用来指示多个优化目标之间的相对重要程度以及最大化最小化。如示例中给出的(-1.0, 1.0)代表对第一个目标函数取最小值,对第二个目标函数取最大值。
2.个体编码
实数编码(Value encoding):直接用实数对变量进行编码。优点是不用解码,基因表达非常简洁,而且能对应连续区间。但是实数编码后搜索区间连续,因此容易陷入局部最优。
3 初始种群建立
一般族群
这是最常用的族群类型,族群中没有特别的顺序或者子族群。
同类群
同类群即一个族群中包含几个子族群。在有些算法中,会使用本地选择(Local selection)挑选育种个体,这种情况下个体仅与同一邻域的个体相互作用。
toolbox.register("deme", tools.initRepeat, list, toolbox.individual)

DEME_SIZES = 10, 50, 100
population = [toolbox.deme(n=i) for i in DEME_SIZES]
粒子群
粒子群中的所有粒子共享全局最优。在实现时需要额外传入全局最优位置与全局最优适应度给族群。
creator.create("Swarm", list, gbest=None, gbestfit=creator.FitnessMax)
toolbox.register("swarm", tools.initRepeat, creator.Swarm, toolbox.particle)
4 评价
评价部分是根据任务的特性高度定制的,DEAP库中并没有预置的评价函数模版。

在使用DEAP时,需要注意的是,无论是单目标还是多目标优化,评价函数的返回值必须是一个tuple类型。
5 配种选择
selTournament()        锦标赛选择
selRoulette()        轮盘赌选择(不能用于最小化或者适应度会小于等于0的问题)
selNSGA2()        NSGA-II选择,适用于多目标遗传算法
selSPEA2()        SPEA2选择,目前版本(ver 1.2.2)的该函数实现有误,没有为个体分配距离,不建议使用。
selRandom()        有放回的随机选择
selBest()        选择最佳
selWorst()        选择最差
selTournamentDCD()        Dominance/Crowding distance锦标赛选择,目前版本的实现也有些问题
selDoubleTournament()        Size+Fitness双锦标赛选择
selStochasticUniversalSampling()        随机抽样选择
selLexicase()        词典选择,参考这篇文章
selEpsilonLexicase()        词典选择在连续值域上的扩展
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表