遗传算法原理及例题 | 您所在的位置:网站首页 › 求最值例题 › 遗传算法原理及例题 |
求解函数 f(x) = x + 10*sin(5*x) + 7*cos(4*x) 在区间[0,9]的最大值。
这个函数大概长这样: ;lt;img src=;https://pic7.zhimg.com/50/c461e04cdc0b8947bad5f1a47fc322e6_hd.jpg; data-caption=;; data-size=;normal; data-rawwidth=;1266; data-rawheight=;932; class=;origin_image zh-lightbox-thumb; width=;1266; data-original=;https://pic7.zhimg.com/c461e04cdc0b8947bad5f1a47fc322e6_r.jpg;;gt;![]()
那么如何应用遗传算法如何来找到这个奇怪的函数的最大值呢? 事实上,不管一个函数的形状多么奇怪,遗传算法都能在很短的时间内找到它在一个区间内的(近似)最大值。 相当神奇,不是吗? 接下来围绕这个问题,讲讲我对遗传算法的一些理解。实现代码以及在Matlab中使用遗传算法的小教程都附在最后。
1.介绍 遗传算法(Genetic Algorithm)遵循『适者生存』、『优胜劣汰』的原则,是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。 遗传算法模拟一个人工种群的进化过程,通过选择(Selection)、交叉(Crossover)以及变异(Mutation)等机制,在每次迭代中都保留一组候选个体,重复此过程,种群经过若干代进化后,理想情况下其适应度达到***近似最优***的状态。 自从遗传算法被提出以来,其得到了广泛的应用,特别是在函数优化、生产调度、模式识别、神经网络、自适应控制等领域,遗传算法发挥了很大的作用,提高了一些问题求解的效率。
2.遗传算法组成 编码 -> 创造染色体个体 -> 种群适应度函数遗传算子 选择交叉变异运行参数 是否选择精英操作种群大小染色体长度最大迭代次数交叉概率变异概率
2.1 编码与解码 实现遗传算法的第一步就是明确对求解问题的编码和解码方式。 对于函数优化问题,一般有两种编码方式,各具优缺点 实数编码:直接用实数表示基因,容易理解且不需要解码过程,但容易过早收敛,从而陷入局部最优二进制编码:稳定性高,种群多样性大,但需要的存储空间大,需要解码且难以理解
对于求解函数最大值问题,我选择的是二进制编码。 ;lt;img src=;https://pic4.zhimg.com/50/6f49b2e302fbebe4d3c4242495e3b1ab_hd.jpg; data-caption=;; data-size=;normal; data-rawwidth=;706; data-rawheight=;304; class=;origin_image zh-lightbox-thumb; width=;706; data-original=;https://pic4.zhimg.com/6f49b2e302fbebe4d3c4242495e3b1ab_r.jpg;;gt;![]() 以我们的目标函数 f(x) = x + 10sin(5x) + 7cos(4x), x∈[0,9] 为例。 假如设定求解的精度为小数点后4位,可以将x的解空间划分为 (9-0)×(1e+4)=90000个等分。 2^16 |
CopyRight 2018-2019 实验室设备网 版权所有 |