首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择按概率加权的随机状态

选择按概率加权的随机状态
EN

Stack Overflow用户
提问于 2017-05-23 01:16:16
回答 1查看 75关注 0票数 1

我正在尝试为自定义RL算法创建一个随机环境这段代码的目的是获取一个有序字典(例如: OrderedDict((0,1),(1, 0),(2,0),(3,0))元组中的第一个数字是indx第二个是概率),并根据有序字典中定义的状态发生的概率随机返回新状态(在上面的示例中,它进入状态0的可能性为100% )

我遇到的问题是,由于某种原因,当indx为0时(对于上面的示例输入),概率也为0。我预计概率为1。

在同样的例子中,pcloud == 1就是我想要的。这意味着我在使用enumerate时有些地方弄错了,但我不知道它是什么。

代码语言:javascript
复制
def collapse(pcloud): 
        randomnum  = Random.uniform(0,1)
        threshold = 0

        for indx , probability in enumerate(pcloud):
            threshold += probability
            if randomnum <= threshold:                    
                return indx
        raise ValueError("For some reason the probabilities can't be compared with the <= operator.")
        #it should never get here.
        return

要运行代码,请创建一个有序字典。

代码语言:javascript
复制
from collections import OrderedDict
import random as Random
#all probabilities should sum to 1
pcloud = OrderedDict()
pcloud[0] = 1
pcloud[1] = 0
pcloud[2] = 0
pcloud[3] = 0

#then run the function
print collapse(pcloud)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-23 01:22:25

你不应该仅仅因为涉及到索引就使用enumerate。索引已经作为OrderedDict的键出现了。您需要遍历OrderedDict的键值对,因此应该遍历它的items()或Python2上的iteritems() (因为items()在Python2上构建了一个不必要的列表):

代码语言:javascript
复制
for index, probability in pcloud.items():
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44118627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档