Ruby 为什么我的递归函数总是使用相同的随机数?
我想写一些模拟鞅赌博系统的东西。如果你不熟悉这一点,这是一个投币游戏的“肯定的事!”(不是肯定的事)投注系统,你每次输都会加倍下注,希望在第一次赢的时候赢回你所有的输钱 所以你的赌注是10美元->输->20美元->输->40美元->输->80美元->赢!->$10 很简单,对吧?我认为逻辑是:Ruby 为什么我的递归函数总是使用相同的随机数?,ruby,Ruby,我想写一些模拟鞅赌博系统的东西。如果你不熟悉这一点,这是一个投币游戏的“肯定的事!”(不是肯定的事)投注系统,你每次输都会加倍下注,希望在第一次赢的时候赢回你所有的输钱 所以你的赌注是10美元->输->20美元->输->40美元->输->80美元->赢!->$10 很简单,对吧?我认为逻辑是: 有一个钱包变量,从1000美元开始 打个赌 用兰特(0..1)掷硬币。0将是一场损失,1将是一场胜利 如果我赢了,把赌注加到我的钱包里。如果我输了,从我的钱包中减去赌注,然后再进行一次新的赌注,赌注是前一
兰特(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
,您可以看到余额上下波动
我想这就是赌博系统的重点。我不认为这个方法的随机部分有什么问题。该死,我甚至没有想到,现在我觉得自己很愚蠢。当然是这样了。谢谢你的解释。