【问题标题】:How to control the probablity of an event given a certain number of dice rolls给定一定数量的骰子,如何控制事件的概率
【发布时间】:2017-05-28 17:03:08
【问题描述】:

我有一个回合制游戏。我对玩家设置了一个条件,即在接下来的X 固定轮数中,他/她有Y 百分比的机会触发其他事件(比如游戏结束)。

所以说x = 5y = 80%。我需要掷硬币 5 次(最多),并且在每次掷硬币时,修改结果百分比(在真假之间),以便 综合/平均百分比在所有 5 回合中滚动为真等于 80%。

如果我让每次掷骰的几率为 80%,那么 5 回合的平均几率不会达到 80%(它要高得多)。那么,在给定 x 次硬币翻转的情况下,如何强制 y %(大致)?

我正在使用 JavaScript。

编辑:

根据 Thiatt 的建议,我在下面实现了这段代码(假设 0.16 超过 5 圈将产生 80%)。在实践中,它接近 68%。

这似乎很接近,但当我实施时,它接近 70%:

for(var k = 0; k < 20; k++){    
    var totalHit = 0;
    for(var i = 100; i >=0; i--){
            var hit = false;
        for(var j = 0; j < 5; j++){
            var roll = rollDice(1, 100);
            hit = roll <= 20;
            if(hit){
                totalHit++;
                break;
            }
        }
    }
    debug('Hit ' + totalHit + '/100');
}

【问题讨论】:

  • 您可以事先决定用户是否滚动正确的值?首先是 1 或 0 的 80%。然后随机掷骰子
  • p1+p2+p3+p4+p5=0.8?那么 p = 0.8/5?
  • @Thiatt 我觉得应该是(p1+p2+p3+p4+p5)/5 = 0.8
  • @Thiatt 也许将其作为答案发布,以便 OP 可以接受?
  • 5 回合中 80% 的平均概率与 5 回合中 80% 的概率不同。我想我还是错了,没想到这么多。

标签: javascript probability


【解决方案1】:

我对您问题的解析是,使用您的示例数字,您希望用户在 5 回合内未触发事件 Y 的概率为 0.2。也就是说,他们有 0.8 的机会触发事件 Y 至少一次(1、2、3、4 或 5 次,而不是 0 次)。

您使用的是硬币,因此每轮有两个可能的事件。在单轮中不触发的概率将是 (1-p),其中 p 是您正在求解的所需概率。超过五轮你有 (1-p)(1-p)(1-p)(1-p)(1-p)=(1-p)^5=0.2,求解 p 得到 ~0.275 或 27.5% .如果你每次掷骰都有 27.5% 的几率触发 Y,那么至少触发一次 Y 的概率是 80%。

【讨论】:

  • 这是唯一正确的答案,你打败了我。简单来说,可以用这个例子来解释——如果周一有 20% 的几率下雨,周二有 20% 的几率,周三有 30% 的几率,那么这三个期间下雨的总体几率是多少- 天期间?你是怎么计算的?
  • 您假设第一天 (0.8) 不会下雨,乘以第二天 (0.8) 和第三天 (0.7) 的机会。这给了你 0.448。所以有 44.8% 的机会不会下雨,这意味着在这三天内有 55.2% 的机会会下雨。 Source。在这种情况下,55.2% 只是 80%,其余部分可以通过代数求解。
【解决方案2】:

让 80% 为真:

if(Math.random()<0.8) alert("we were the lucky 80%!");

一些解释:

假设我们掷骰子。如果我们想在 50% 时获胜,我们简单地说,一个在 1、2、3 时赢,在 4、5、6 时输。

win=RollDice()<3;

同样的原理也可以用于 Math.random。它返回一个介于 0 和 1 之间的数字,因此 80% 将是 0.8。

【讨论】:

  • 这实际上只有 20% 的机会,因为 Math.random() 返回一个介于 0 和 1 之间的数字。
【解决方案3】:

P = Y/X

对于 5 次掷骰,如果每次掷骰有 16% 的几率触发事件,那么在 5 次掷骰后有 80% 的几率触发事件。

或者,如果您想在所有剩余的掷骰中保持 80% 的概率:

P(n) = Y/(X-n+1)

因此,如果第一个掷骰子是假的,那么剩下的 4 个有 80% 的机会得到真。如果前两个是假的,那么其他 3 个有 80% 的变化成真,以此类推。

【讨论】:

  • 这看起来很接近,但是当我实现它时,它接近 70%:\nfor(var k = 0; k =0; i--){ var hit = false; for(var j = 0; j
  • 那是因为我对此很烂,请查看最佳答案;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多