Python实现轮盘赌算法

最近在学Python和演化算法,写写轮盘赌算法。
算法本身的话,我看书上写挺好的就拍了一张:
在这里插入图片描述
代码:
里面的数组是30城市TSP问题得到的数据。

import numpy as np

def roulette(probability):
    probabilityTotal = np.zeros(len(probability))
    probabilityTmp = 0
    for i in range(len(probability)):
        probabilityTmp += probability[i]
        probabilityTotal[i] = probabilityTmp
    randomNumber=np.random.rand()
    result=0
    for i in range(1, len(probabilityTotal)):
        if randomNumber<probabilityTotal[0]:
            result=0
            print("random number:",randomNumber,"<index 0:",probabilityTotal[0])
            break
        elif probabilityTotal[i - 1] < randomNumber <= probabilityTotal[i]:
            result=i
            print("index ",i-1,":",probabilityTotal[i-1],"<random number:",randomNumber,"<index ",i,":",probabilityTotal[i])
    return result

probability=[0.39897898,0.05301439,0.03615747,0.02251049,0.02993633,0.02285509,0.01361222,0.03879427,0.01937278,0.0274668,0.02173864,0.03050861,0.01137698,0.00821177,0.01364433,0.01546327,0.05063628,0.03238738,0.03441008,0.01896785,0.01343442,0.01250853,0.00500341,0.01080083,0.01227628,0.00865885,0.01000899,0.01326119,0.0140035]
result=np.zeros(100).astype(int)
count=np.zeros(100).astype(int)
for i in range(100):
    print("loop",i)
    result[i]=roulette(probability)
    count[result[i]]+=1
print("result:",result)
print("count:",count)

运算结果(运行100次)
[p0,p0+p1,…,p0+p1+…+p29]的结果
在这里插入图片描述
随机数的位置(以运行的第100次为例)
在这里插入图片描述
运行100次后的结果
在这里插入图片描述
统计了一下每个位置出现的概率,发现其实出现概率和原始概率(p0,p1…,pn)的占比分布是相近的
在这里插入图片描述
Over.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值