赌轮盘代码 20210124

赌轮盘(赌轮盘)的意义

从大的概率分布来说,赌轮盘是按照既定的概率分布进行抽样,其本质可以用np.choice的方式来实现,当然,绝大数情况下,我们都是自己去写的,因此,本文给出两种形式赌轮盘取数据的方式。

输入值:一行数值,

输出值:根据这行数值概率分布而采样得到的index序列。

代码实现

import numpy as np

"""
名称:赌轮盘选择一对
"""
def roulette_get_oneindex(F, probability_sum):
    #赌轮盘玩法,选择出一个
    rand = random.uniform(0, 1)  # 在0-1之间随机一个浮点数
    for k in range(len(F)):
        if k == 0:
            # 如果rand值小于概率累积分布数组中的第一个值,则取第一个
            if rand < probability_sum[k]:
                return k
        else:
            if (rand > probability_sum[k - 1]) and (rand < probability_sum[k]):
                return k


def rouletter():
    # 概率累积分布
    probability_sum = np.cumsum(probability)
    print(probability_sum)
    index_result=[]
    for i in range(100):
        # 赌轮盘选择出1个
        oneindex = roulette_get_oneindex(F, probability_sum)
        index_result.append(oneindex)
    return (np.array(index_result))


if __name__=="__main__":
    F=np.random.random(size=10)
    F[9]=3
    print(F)
    #选择和交叉操作
    # 构建累积概率分布
    probability = F / np.sum(F)
    print(probability)
    # 方式一:自己实现轮盘赌
    rouletter_result=rouletter()
    print(rouletter_result)
    # 方式二:采用np.choice
    sample_result=np.random.choice(a=np.arange(F.shape[0]),size=100,replace=True,p=probability)
    print(sample_result)

结果分析

在这里插入图片描述
从结果分布,发现9出现的次数是最多的,两者都是,说明本文的两种轮盘赌方法都是有效的,而且方法2的简洁性更强,足见numpy的优势。

后记

作此篇,纪念2016年自己硕士毕业时也运用了这个方法,当时是用C#和JAVA实现的,客观而言,简洁性不足,也未深究其中的深层次内涵,而今,采用Python实现,简洁性大大提升。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值