Ruby 为什么我的递归函数总是使用相同的随机数?

Ruby 为什么我的递归函数总是使用相同的随机数?,ruby,Ruby,我想写一些模拟鞅赌博系统的东西。如果你不熟悉这一点,这是一个投币游戏的“肯定的事!”(不是肯定的事)投注系统,你每次输都会加倍下注,希望在第一次赢的时候赢回你所有的输钱 所以你的赌注是10美元->输->20美元->输->40美元->输->80美元->赢!->$10 很简单,对吧?我认为逻辑是: 有一个钱包变量,从1000美元开始 打个赌 用兰特(0..1)掷硬币。0将是一场损失,1将是一场胜利 如果我赢了,把赌注加到我的钱包里。如果我输了,从我的钱包中减去赌注,然后再进行一次新的赌注,赌注是前一

我想写一些模拟鞅赌博系统的东西。如果你不熟悉这一点,这是一个投币游戏的“肯定的事!”(不是肯定的事)投注系统,你每次输都会加倍下注,希望在第一次赢的时候赢回你所有的输钱

所以你的赌注是10美元->输->20美元->输->40美元->输->80美元->赢!->$10

很简单,对吧?我认为逻辑是:

  • 有一个钱包变量,从1000美元开始
  • 打个赌
  • 兰特(0..1)
    掷硬币。0将是一场损失,1将是一场胜利
  • 如果我赢了,把赌注加到我的钱包里。如果我输了,从我的钱包中减去赌注,然后再进行一次新的赌注,赌注是前一次的两倍
  • 我这样写:

    def flip(bet)
        if rand(0..1) == 0 then
            $balance += bet
        else
            $balance -= bet
            flip(bet*2)
        end
    end
    
    然后我运行
    flip(10)
    一千次,看看这个投注系统有多有效

    问题是我总是得到完全相同的结果。我将运行程序十次,前五个结果将始终是10101030103010401050。。。所以有点不对劲。但我真的看不出是什么;我觉得这个逻辑很好

    为了测试一下,我删除了递归调用,行
    flip(bet*2)
    。取而代之的是,我只是进行了上千次常规押注。这就是你所期望的,每次都会有不同的结果


    那么这里发生了什么?

    您的结果正是您对“确定的事情”下注的期望,因为您允许
    $balance
    变为负值,因此更好的结果不会受到任何限制(实际上他们拥有无限的资源)。由于损失10、20、40美元,然后再增加80美元,该策略将始终在最后余额上退出10美元。因为你允许负余额,更好的是允许继续这样做-而模型可能会注意到,如果他们连续输掉6场比赛(64分之一的机会),那么他们将降至370美元,并且无法在640美元下一次下注


    添加一些东西来捕捉资金耗尽的情况,您应该会看到在发生这种情况之前需要进行多少次下注,或者
    $balance
    的损失值是多少(即,您可以通过这种方式证明“确定的事情”策略是有缺陷的——因为每赢63次10美元,就有一次630美元的损失来完美平衡它)

    从逻辑上看,它似乎会反复下注,直到你赢为止。所以看起来你的余额每次都会增加10,所以是“1010103010401050”

    如果在
    翻转(下注*2)
    行之前放置
    放置$balance
    ,您可以看到余额上下波动


    我想这就是赌博系统的重点。我不认为这个方法的随机部分有什么问题。

    该死,我甚至没有想到,现在我觉得自己很愚蠢。当然是这样了。谢谢你的解释。