【发布时间】:2013-03-13 15:41:36
【问题描述】:
我有一个关于轮盘选择的 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对应的区间内的可能性是4对应的区间的四倍1.
换句话说,假设您要旋转一个轮盘式结构,每个x 分配一个扇区,扇区的面积与其各自的F(x) 值成正比,那么概率指标将在任何给定扇区停止与F(x) 的值成正比,对于x。
【讨论】: