我正在尝试写一些模拟鞅赌博系统的东西。如果你不熟悉这个,那就是“肯定的事!” (不是肯定的)投币系统用于掷硬币游戏,每次输掉时你都会加倍投注,希望在第一场胜利时赢回所有损失的金钱。
所以你的赌注将是10美元 - >损失 - > 20美元 - >损失 - > 40美元 - >损失 - > 80美元 - >赢得! - > $ 10 ...
简单,对吧?我认为逻辑将是:
rand(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)
一千次,看看这个投注系统的效果如何。
问题是我总能得到完全相同的结果。我将运行该程序十次,前五个结果将始终是1010,1020,1030,1040,1050 ...所以有些不对劲。但我真的看不出来;逻辑对我来说似乎很好。
为了测试一下,我删除了递归调用,即行flip(bet*2)
。相反,我只是进行了一千次定期投注。这表现得像你期望的那样,每次都有不同的结果。
那么这里发生了什么?
答案 0 :(得分:3)
看着逻辑,看起来它会递归下注,直到你赢了。因此看起来你的平衡每次都会增加10,因此“1010,1020,1030,1040,1050”。
如果您在puts $balance
行之前放置flip(bet*2)
,则可以看到余额上下移动。
我猜这就是投注系统的重点。我不认为该方法的随机部分有任何问题。
答案 1 :(得分:2)
您的结果正是您所期望的"确定的事情"投注,因为你允许$balance
变为负数,所以更好的不受任何限制(实际上它们拥有无限的资源)。该策略将在最后一笔余额中退出10美元,原因是10,20,40美元,然后加80.因为你允许负余额,更好的是允许继续这 - 虽然模型可以注意到他们连续输掉6场比赛(64次机会中有1场),然后他们会失败至370美元,并且无法以640美元进行下一次下注。
添加一些东西以防止资金耗尽,你应该看到在发生这种情况之前需要多少赌注,或$balance
的失败价值是多少(即你可以通过这种方式证明"确定的事情"战略是有缺陷的 - 因为每10美元的63胜,就会有630美元的损失以完美平衡它。)