遗传算法(Genetic Algorithm,GA)的轮盘赌选择,python

遗传算法(Genetic Algorithm,GA)的轮盘赌选择,python

一个简单的例子说明在遗传算法中使用的轮盘赌方法。

(1)假设有一个 初始种群,01二进制编码十进制数值:

s1= 13 (01101)

s2= 24 (11000)

s3= 8   (01000)

s4= 19 (10011)

(2)计算适应度,假设适应度函数为f(s)=s^2 ,则:

f(s1) = f(13) = 13^2 = 169
f(s2) = f(24) = 24^2 = 576
f(s3) = f(8) = 8^2 = 64
f(s4) = f(19) = 19^2 = 361

接下来的,

(3)染色体选择概率:

(4)染色体累积概率:

选择概率形成的轮盘:

 显然,p(s2)=0.49概率最大,被选中的概率最高。下面用python写一个轮盘选择实现,验证我们的猜想:

import random

p = [0.14, 0.49, 0.06, 0.31]

#遗传算法-轮盘赌选择
def rws():
    # r为0到1之间的随机数
    r = random.uniform(0, 1)

    idx = 0
    sm = 0
    for i in range(len(p)):
        # 产生的随机数在sm~sm+p[i]间则认为选中i
        # 因此i被选中的概率是p[i]
        sm = sm + p[i]
        if r <= sm:
            idx = i
            break

    return idx


if __name__ == '__main__':
    for i in range(10):
        i = rws()
        print(p[i])

程序跑了10次,每一次在rws()函数中产生一个随机概率数值r,然后在rws()函数内部比较r与累积概率的大小,确定被选中的概率是p[?]

运行输出:

0.14
0.31
0.49
0.31
0.31
0.49
0.31
0.14
0.49
0.49

输出结果证实了我们的猜想,p[s2]=0.49被选中的概率最高,在10次的随机筛选中,p[s2]=0.49被选中了4次(4/10)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值