您的位置:首页 > 编程语言 > Python开发

P-1.2 模拟使用某种策略进行抛硬币赌博的结果

2018-01-05 18:54 183 查看
已知理论上在期望为0的赌博游戏时在大量进行后收支为0

但我不理性地想要测试一下,因为对于这个问题我比较感性

规则:现有起筹码点数n点,玩家进行一次押注后庄家展示一个随机产生的硬币结果,结果为若为正则玩家获得等同于押注额的点数,结果若为负则押注筹码归庄家

策略1:押注额为0,直到连续出现t次负的结果,此后押注c个筹码,只要结果为负,则押注f(e)个筹码,直到结果为正为止,其中e(for error),是结果连续为负的次数与t的差,意为失败的次数。f(e)是一个关于e的函数(可能为ce,c∈R )。当出现正的结果,则本次策略的执行结束,紧接着再次执行策略1。

对策略1模拟的实现:

使用Python

switch=1
signal=0
counter=0
n=0
t=0
k=0
r=0
c=0
e=0

n=int(input('起始筹码个数:'))
t=int(input('策略1:连续几次为负后开始投注:'))
c=int(input('策略1:开始投注时起始投注数:'))
k=int(input('请输入策略1失败函数f(e)=c^(e*k+1)中的k的值:'))#此处唯一的意义是体现修改函数的思想#

import random
while switch==1:
r=random.randint(0,1)
if signal==1:
n=n-c**(e*k+1)
print('扣除筹码',c**(e*k+1),'个,现有筹码',n,'个')
if r==0:
e=e+1
else:
n=n+2*(c**(e*k+1))
print('获得筹码',2*(c**(e*k+1)),'个,现有筹码',n,'个')
signal=0
e=0
else:
if r==0:
counter=counter+1
if counter==t:
signal=1
counter=0
else:
counter=0


以下是一段运行结果

运行结果1:

起始筹码个数:1000000
策略1:连续几次为负后开始投注:10
策略1:开始投注时起始投注数:10
请输入策略1失败函数f(e)=c^(e*k+1)中的k的值:1

......

扣除筹码 10 个,现有筹码 11177560 个
扣除筹码 100 个,现有筹码 11177460 个
扣除筹码 1000 个,现有筹码 11176460 个
扣除筹码 10000 个,现有筹码 11166460 个
获得筹码 20000 个,现有筹码 11186460 个
扣除筹码 10 个,现有筹码 11186450 个
扣除筹码 100 个,现有筹码 11186350 个
扣除筹码 1000 个,现有筹码 11185350 个
扣除筹码 10000 个,现有筹码 11175350 个
扣除筹码 100000 个,现有筹码 11075350 个
扣除筹码 1000000 个,现有筹码 10075350 个
获得筹码 2000000 个,现有筹码 12075350 个
扣除筹码 10 个,现有筹码 12075340 个
获得筹码 20 个,现有筹码 12075360 个
扣除筹码 10 个,现有筹码 12075350 个
扣除筹码 100 个,现有筹码 12075250 个
获得筹码 200 个,现有筹码 12075450 个


对以上的运行结果进行这样的观察:

每一次代表扣除的输出中,从“扣”到“个”的长度与失败次数是成正比的。现在拥有的阶梯型的输出有着很好的直观。

运行结果2:

起始筹码个数:10000
策略1:连续几次为负后开始投注:5
策略1:开始投注时起始投注数:10
请输入策略1失败函数f(e)=c^(e*k+1)中的k的值:0
扣除筹码 10 个,现有筹码 9990 个
获得筹码 20 个,现有筹码 10010 个
扣除筹码 10 个,现有筹码 10000 个
获得筹码 20 个,现有筹码 10020 个
扣除筹码 10 个,现有筹码 10010 个
扣除筹码 10 个,现有筹码 10000 个
扣除筹码 10 个,现有筹码 9990 个
获得筹码 20 个,现有筹码 10010 个
扣除筹码 10 个,现有筹码 10000 个
扣除筹码 10 个,现有筹码 9990 个
扣除筹码 10 个,现有筹码 9980 个
获得筹码 20 个,现有筹码 10000 个
扣除筹码 10 个,现有筹码
abc6
9990 个
获得筹码 20 个,现有筹码 10010 个
扣除筹码 10 个,现有筹码 10000 个
扣除筹码 10 个,现有筹码 9990 个
获得筹码 20 个,现有筹码 10010 个


对以上的运行结果进行这样的观察:

通过改变失败函数使得失败投注额不再增加。

筹码额在程序运行初期是浮动于原值附近的,则投注额不增加时再次验证了P-1.1的结论是正确的。

对以上两次运行结果有这样的思考:

通过观察得到:在一个不考虑绿色0的“公平”轮盘赌中,只押红色,第一次押1元,第二次押10元,直到押中,在这个过程中,最终都赚到钱了。亏钱的概率是与投入的次数成反比的。而在对硬币随机数的观察中发现,连续出现多次(哪怕只是12次)同色的概率是很低的,很少见,所以估计,连续出现100次同色的概率是极低的,甚至是很难见到的(不理性地讲,是不可能出现的)。所以在公平的抛硬币游戏中,只要不断地且递进地投注,最终是极有可能(不理性地讲,是一定)能够收益的。当然,在轮盘赌中有1/37的概率命中0,但若将0视为同色结果,依旧是极有可能(不理性地讲,是一定)能够收益的。

总结

策略1最初的设想包含了P-1.1中的不理性猜测:硬币n次同面后第n+1次更有可能是异面的。但在策略1的验证中通过使初次投注失败后的投注额不增加,得到的验证结果依旧是支持P-1.1的结果的,筹码总额是大体不变的。但是策略1的验证中,结合对(0,1)随机结果的观察,可喜地,发现并验证了在简单抛硬币赌博游戏中更好的策略:在第k次投注失败后增加第k+1次投注额s.t.若第k+1次投注成功获得的收益=(前k次投注失败额的总和+一定的收益profit),p.s.其中profit是充足的,使人愉快的。当本金充分大时profit是任意的,当本金是有限的且不充分大时profit应当是递进而可接受的值。

以上,可以认为是由策略1总结归纳而出的策略2。

而策略2的代价是什么,还需要考虑甚至验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 随机过程