遗传算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遗传算法相关的知识,希望对你有一定的参考价值。
参考技术A 参考文献: 知乎 遗传算法 编码解码知识实现遗传算法的第一步就是明确对求解问题的编码和解码方式。对于函数优化问题,一般有两种编码方式,各具优缺点
实数编码:直接用实数表示基因,容易理解且不需要解码过程,但容易过早收敛,从而陷入局部最优
二进制编码:稳定性高,种群多样性大,但需要的存储空间大,需要解码且难以理解
对于求解函数最大值问题,我选择的是二进制编码。
以我们的目标函数 f(x) = x + 10sin(5x) + 7cos(4x), x∈[0,9] 为例。
假如设定求解的精度为小数点后4位,可以将x的解空间划分为 (9-0)×(1e+4)=90000个等分。
2^16<90000<2^17,需要17位二进制数来表示这些解。换句话说,一个解的编码就是一个17位的二进制串。
一开始,这些二进制串是随机生成的。
一个这样的二进制串代表一条染色体串,这里染色体串的长度为17。
对于任何一条这样的染色体chromosome,如何将它复原(解码)到[0,9]这个区间中的数值呢?
对于本问题,我们可以采用以下公式来解码:
decimal( ): 将二进制数转化为十进制数
一般化解码公式:
lower_bound: 函数定义域的下限
upper_bound: 函数定义域的上限
chromosome_size: 染色体的长度
通过上述公式,我们就可以成功地将二进制染色体串解码成[0,9]区间中的十进制实数解。
染色体,就是指由 DNA 组成的聚合体,DNA 上的每个基因都编码了一个独特的性状,比如,头发或者眼睛的颜色
可以将他看作是一个优化问题,它可以尝试找出某些输入,凭借这些输入我们便可以得到最佳的输出值或者是结果
遗传算法要点:
1.初始化
初始化候选全体,随机初始化
2.查找适应函数
3.选择:物竞天择,适者生存
先选择能量强的个体,然后再进行随机选择,选出适应度虽然小,但是幸存下来的个体
4.交叉:
5.变异:根据需要进行选择
遗传算法 Python Geatpy库
参考技术A 由华南农业大学、暨南大学、华南理工大学等一批大佬们研发的超高性能、通用性强、能够轻松应用到实际工程项目之中的、能让用户快速上手进化算法的工具箱(遗传算法工具箱),详情见官网 http://geatpy.com/index.php/home/ 。Geatpy 是一个高性能实用型进化算法工具箱,提供了许多已实现的进化算法各项操作的函数,如初始化种群、选择、交叉、变异、多目标优化参考点生成、非支配排序、多目标优化 GD、IGD、HV 等指标的计算等等。
本文为学习笔记,参考网站为Geatpy官网,网址如下。
首页: http://geatpy.com/index.php/home/
文档: http://geatpy.com/index.php/details/
以上是关于遗传算法的主要内容,如果未能解决你的问题,请参考以下文章