根据每个动作的概率创建一个动作列表

2024-05-16 10:50:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个动作及其概率:

walk:5

talk:1

run:2

我需要做所有的事。你知道吗

但最重要的行动应该(但不是必须)首先执行,而且只能执行一次。你知道吗

所以在谈话之前,散步有5倍的机会被处死。你知道吗

而且,如果以前从未执行过walk,我也不能跑。你知道吗

我目前的解决方案是昂贵的,但它的工作。现在我编写一个列表,第一个操作将插入列表的开头:

actions_poll = ['walk']*5 + ['run']*2 + ['talk']*1
flow_control= []
while len(flow_control) != 3:
    action = roll one action from action pool
    if action not in flow_control:
       * check if action is run and walk is in flow control
       flow_control.append(action)

我猜在actions\u poll中使用一个带有amount的列表不是最好的方法,当walk为5000,talk为1时,循环可以运行很长时间。你知道吗

建议?你知道吗


Tags: runinactions列表ifisaction概率
1条回答
网友
1楼 · 发布于 2024-05-16 10:50:39

可以使用np.random.choice根据动作的概率对动作进行采样(使用参数p=),并使用set检查是否对所有动作进行了采样,如下所示

import numpy as np

actions = ['walk', 'talk','run']
weights = np.array([5,1,2]) 

flows_control = set()
flows_decision = []
while len(flows_control) < len(actions):
    action = np.random.choice(actions, p=weights/weights.sum(), size=1)[0]
    flows_control.add(action)
    flows_decision.append(action)

如果您想让您的flows_decision成为一个独特决策的列表,只需执行以下操作:

np.random.choice(actions, p=weights/weights.sum(), size=len(actions), replace=False)

相关问题 更多 >