Python:二项分布在设置为变量时不起作用

Python: Binomial distribution doesn't work when set as a variable

我正在尝试重新制作一款名为 Dudo 的单人版骰子游戏。最相关的信息是六个玩家有六个隐藏的骰子,游戏的重点是猜测 table 上总共有多少个某种骰子(例如,如果有十个 4,或者十二个5 秒等)。

为了制作一些 AI,我使用了二项分布,其中计算机根据手中已经拥有的那种骰子的数量来猜测存在一定数量的某种骰子的概率.我将这个等式保存在变量 chance 中:

chance = ((1/3) ** (i - player_dice_type[turn][active_type])) * ((2/3) ** (total_count - i - player_count[turn] + player_dice_type[turn][active_type]))

i 是那种骰子的数量(例如六个 5,或七个 5,或八个 5 等)。我有一个玩家拥有的每种骰子数量的列表 (player_dice_type),我可以通过子集 turnactive_type 为特定玩家 select 特定骰子. 1/3 与游戏规则有关(通常骰子为 1/6),但这与我的问题无关。

当我调用 chance 时,它​​只给我 if player_dice_type[turn][active_type] = 0i = 6 的值,所以当计算机在 table 上有 6 个骰子的概率有 0 个。

我可以调用 iplayer_dice_type[turn][active_type] 并查看它们不等于 6 或 0。但问题是,如果我复制并粘贴等式,它可以很好地工作。当我调用 chance 时,它​​只默认为 6 和 0。

我也试过做一个chancefun(i)函数returns原方程,然后说chance = chancefun(i)。我可以将环境中的 i 更改为我想要的任何值,chancefun(i) 会做出相应的反应,但是变量 chance 不会。

我将范围界定作为一个标签,只是因为我认为它可能以某种方式相关,但我想不出如何相关。我也试过将变量名从 chance 更改为其他一些东西,但仍然没有成功。

如果您将 chance 定义为变量,则它的值在您创建它时是固定的。如果您稍后更改 i 或其他任何值,它将不会 "update"。你不能像你定义的那样 "call" 机会;它只是一个静态值,不是函数。

如果您执行类似 chance = chancefun(i) 的操作,那么 设置 机会值,一次,仅此而已。是不是 "link" 变量 chancechancefunc 不知何故。

如果你想为不同的参数获得不同的机会值,把它做成一个函数并用你想要的参数调用它。类似于:

def chance(i, turn, active_type):
    return ((1/3) ** (i - player_dice_type[turn][active_type])) * ((2/3) ** (total_count - i - player_count[turn] + player_dice_type[turn][active_type]))

我在这里假设 player_dice_typetotal_count 是全局定义的变量。您需要决定要 chance 全局查找哪些值,以及要在每次调用时传递哪些值。

我认为这个问题与 chance 在一开始就计算一个值并保持该值有关。当一切启动时,i = 6 和 player_dice_type 是一个空列表(它稍后会被另一个函数填充)。稍后,我可以在生成一些数字并更改 i 后输入 chance = chancefun(i)chance 将显示该确切值,但会再次锁定它。

我可能会继续使用 chancefun(i) 而不使用 chance,但我认为将所有内容保存在一个名为 chance 的变量下会非常方便,因为稍后我必须将多个概率相加