【问题标题】:Logic / Probability Question: Picking from a bag逻辑/概率问题:从袋子里挑选
【发布时间】:2009-11-29 06:12:12
【问题描述】:

我正在编写一个棋盘游戏,其中有一袋可能的棋子。每回合,玩家根据一定的规则从袋子中随机取出棋子。

对于我的实施,最初将袋子分成一个或多个玩家的池可能更容易。这些池将是随机选择的,但现在不同的玩家将从不同的袋子中挑选。这有什么不同吗?

如果一个玩家的包用完了,更多的包会从一般储备中随机洗入。

【问题讨论】:

    标签: logic probability


    【解决方案1】:

    只要:

    • “池”袋的划分是随机的
    • 给定台球袋的玩家分配是随机的
    • 游戏是这样的,玩家抽取的物品会被有效地从袋子中取出(在当前游戏期间,永远不会返回袋子或任何其他袋子)
    • 玩家不知道任何包的内容

    这两种方法(“原始”使用一个大的普通袋子,“修改”每个玩家一个台球袋在概率方面是等效的。

    只有在游戏快结束时,当一些玩家的包是空的时,它才会变得有点棘手。从 100% 仍在播放的物品中挑选最公平的方法,因此,他们应该从他们挑选的袋子中挑选,并且 [当然,盲目地] 从所述袋子中挑选一件物品。

    这个问题说明了概率的一个有趣特征,即概率与一个人对情况的了解程度有关。例如,游戏主机可能很清楚分配给玩家 X 的“池”包不包含任何说字母“A”(考虑拼字游戏),但只要没有玩家知道这一点(并且只要池袋中的分区是完全随机的),游戏仍然公平,玩家“X”仍然必须假设他/她在下一次抽取字母时可能击中“A”,就好像所有剩余的字母一样他/她可以使用。

    编辑:
    尽管两个过程完全等价的断言在数学上是正确的,感知在包含机会组件的游戏中是一个重要因素(特别是如果游戏还包含金钱成分)。为了避免不了解这个公平性的玩家的愤怒,你可以坚持原来的程序......

    【讨论】:

      【解决方案2】:

      根据游戏规则,@mjv 是对的,初始随机划分不会影响概率。这类似于 n 名玩家从面朝下的牌组中轮流抽牌的游戏:牌组的初始洗牌是随机分成每个牌手的牌“袋”。

      但是,如果您在每次抽奖后更换物品,那么是一袋还是多袋都没有关系。对于一个袋子,任何特定物品最终都会被任何玩家以相同的概率抽到。对于许多袋子,该物品只能由最初放置它的袋子的玩家抽取。

      弹出到软件级别,如果游戏需要一个袋子,我建议直接这样编程:它应该不会比 n 个袋子更难,而且你不必证明新游戏相当于旧的。

      【讨论】:

        【解决方案3】:

        我的直觉告诉我,将随机集合划分为更小的随机子集将保持同样随机......无论玩家从大池还是从较小池中挑选(反过来,将自己喂入大一)

        对于游戏,恕我直言,随机就足够了!

        【讨论】:

        • -1:没那么简单。获得棋子的机会很小和没有机会(因为它在不同的袋子里,只有其他玩家可以使用)之间有很大的不同。根据游戏的性质,这可能是绝对关键的。
        • 我会在我的回答中补充一点,制作更小的袋子与在游戏开始时“预先挑选”随机碎片是一样的。问题只是及时移动,所以我猜它是随机的。玩家真正选择它们的顺序将在游戏中决定。
        • "有一个小机会得到一个棋子和没有机会有很大的区别"如果你有 8 个棋子给 4 名玩家并制作 4 个袋子,你有 2 次中的 1 次获得你包里的一件特别的东西......如果你只带一个包,我还不足以计算机会,但如果得到一个特定部件的机会大于 0.5,我会感到惊讶!我认为您只有在挑选它们时才能及时前进。
        • 直觉和概率很少齐头并进:以蒙蒂霍尔问题为例!
        • 很少和从不之间有一个差距......每个问题的差距都不同 :) 如果每个人都停止阅读 ire_and_curses 的评论,我同意 mjv...跨度>
        【解决方案4】:

        根据安全性的重要性,这可能没问题(如果涉及金钱(您或他们),请不要这样做)。从一个无知的玩家的角度来看,我不完全确定它会不会那么随机。

        a) 不要指望他们无知,你的程序可能会被破解,然后他们就会知道接下来会出现什么问题

        b) 以不引入漏洞的方式填充袋子是非常棘手的。例如,让我们采用随机挑选一个并将其放入第一个桶中的朴素算法,将其取出,然后对第二个桶做同样的事情,依此类推。您只需确保如果有 N 个棋子,第一个玩家选择给定棋子的概率为 1/N,第二个玩家有 1/(N-1),第三个玩家有 1/(N-3) 和很快。然后玩家可以分析已经玩过的棋子,以确定其他玩家持有某些棋子的概率。

        认为以下算法可能效果更好,但几乎所有人在第一次提出新算法时都会出错。不要使用这个,只要理解它可能涵盖了我谈到的安全漏洞:

        1. 创建一个包含 N 个有序项目的列表并实例化 P 个玩家
        2. 为每位玩家随机标记 1/P 个物品(有替换)
        3. 重复此操作,直到所有 N 个项目都被标记并且有相等的 为每个玩家标记的物品数量(注意:根据 N 和 P,可能需要比您的寿命更长的时间)
        4. 将适当的物品放入玩家的桶中并随机重新排列(不要使用位置交换算法)

        即使在这一切之后,您仍然可能有一个漏洞,有人可以通过漏洞利用找出他们存储桶中的内容。坚持使用组合池,随机选择仍然很棘手,但它会让您的生活更轻松。

        编辑:我知道语气听起来有点生涩。对于那些可能会断章取义并尝试其中一些算法的人,我主要包括了所有这些大胆的内容。我真的希望你好:-)

        编辑 2:进一步考虑,我认为按顺序选择的问题可能会减少到让玩家轮流摆在首位。如果这已经在规则中,那可能没关系。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-04
          • 2013-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-04
          • 2021-05-20
          • 2016-03-08
          相关资源
          最近更新 更多