遗传算法简单易懂的例子

 我来答
磊旺尼酷图E
2022-11-11 · TA获得超过214个赞
知道小有建树答主
回答量:1773
采纳率:100%
帮助的人:26.7万
展开全部

遗传算法的例子如下:

求解函数 f(x) = x + 10*sin(5*x) + 7*cos(4*x) 在区间[0,9]的最大值。

对于求解函数最大值问题,一般选择二进制编码:

实数编码:直接用实数表示基因,容易理解且不需要解码过程,但容易过早收敛,从而陷入局部最优;

二进制编码:稳定性高,种群多样性大,但需要的存储空间大,需要解码且难以理解。

以目标函数 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。对于任何一条这样的染色体将它复原(解码)到[0,9]这个区间中。

可以采用以下公式来解码:

x = 0 + decimal(chromosome)×(9-0)/(2^17-1)decimal( )( 将二进制数转化为十进制数。)

一般化解码公式:

f(x), x∈[lower_bound, upper_bound]x = lower_bound + decimal(chromosome)×(upper_bound-lower_bound)/(2^chromosome_size-1)f(x), x∈[lower_bound, upper_bound]x = lower_bound + decimal(chromosome)×(upper_bound-lower_bound)/(2^chromosome_size-1)lower_bound:函数定义域的下限。
upper_bound:函数定义域的上限。
chromosome_size:染色体的长度。

通过上述公式,我们就可以成功地将二进制染色体串解码成[0,9]区间中的十进制实数解。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式