我有一个关于轮盘选择的 lisp 程序,我试图理解它背后的理论,但我什么都不懂。
如何计算所选字符串的适应度?
例如,如果我有一个字符串 01101,他们是如何得到 169 的适应度值的?
是不是 01101 的二进制编码计算为 13,所以我将值平方并得到答案为 169?
这听起来很蹩脚,但不知何故,我通过这样做得到了正确的答案。
我有一个关于轮盘选择的 lisp 程序,我试图理解它背后的理论,但我什么都不懂。
如何计算所选字符串的适应度?
例如,如果我有一个字符串 01101,他们是如何得到 169 的适应度值的?
是不是 01101 的二进制编码计算为 13,所以我将值平方并得到答案为 169?
这听起来很蹩脚,但不知何故,我通过这样做得到了正确的答案。
(通常)任意选择给定问题的“适应度函数”,记住随着“适应度”指标的上升,解决方案应该接近最优。例如,对于目标是最小化正值的问题,自然选择F(x)
是1/x
。
对于手头的问题,似乎已经给出了适应度函数,就好像F(x) = val(x)*val(x)
不能仅从 (x,F(x)) 的单个值对中确定。
轮盘赌选择只是一种常用的基于适应度的伪随机选择方法。如果您曾经玩过轮盘赌或看过“命运之轮”,这很容易理解。
让我们考虑最简单的情况,其中F(x) = val(x)
,
假设我们有四个值,1,2,3 and 4
。
这意味着这些“个体”1,2,3 and 4
分别具有适应度。现在,选择单个“x1”的概率计算为F(x1)/(sum of all F(x))
。也就是说,由于适应度之和为10
,选择概率分别为0.1,0.2,0.3 and 0.4
。
现在,如果我们从累积的角度考虑这些概率,x 的值将映射到以下“概率:
1 ---> (0.0, 0.1]
2 ---> (0.1, (0.1 + 0.2)] ---> (0.1, 0.3]
3 ---> (0.3, (0.1 + 0.2 + 0.3)] ---> (0.3, 0.6]
4 ---> (0.6, (0.1 + 0.2 + 0.3 + 0.4)] ---> (0.6, 1.0]
也就是说,生成的均匀分布随机变量的实例,比如R
位于归一化区间 中,在 对应的区间中的可能性是对应(0, 1]
的区间的四倍。4
1
换句话说,假设您要旋转一个轮盘式结构,每个x
分配一个扇区,扇区的面积与其各自的值成比例F(x)
,那么指标将在任何给定扇区中停止的概率与F(x)
for that的值成正比x
。