比这篇新的文章: 超级快的计算PI的方法,用javascript计算1000位也在瞬间完成
比这篇旧的文章: 封装Django的send_mail函数,方便在本地(没有邮件服务器)进行邮件相关的测试

连庄 vs. 轮庄

语言: Python, 标签: simulation probability 2008/10/22发布 1年前更新 更新记录
作者: spellscroll, 点击697次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
Python语言: 连庄 vs. 轮庄
01 #!/usr/bin/env python
02 #coding=utf-8
03 """
04 http://spellscroll.com/questionfull/241/
05 两个赌徒A和B决定用如下规则开始赌博:
06 (1) 初始二人均为0分, 每局胜者得1分,先积满n=12分者为最后胜者.
07 (2) 另外每局需要挑选一人当庄, A当庄胜率为p=0.7, B当庄胜率为q=0.6.
08 有两种选庄规则, 一种是轮流当庄, 另一种是胜者连庄.
09 现在假设第一局由A当庄, 请问那种选庄规则对A更有利?
10 http://spellscroll.com
11 数学题概率题算法题编程题智力题
12 """
13
14 from scipy.misc import comb
15 import random
16
17 n = 12
18 p,q = prob = [.7,.6]
19
20 def compute_prob(n,p,q):
21     """  The formula to evaluate the final win probability
22                n   n-1
23          --------------
24     k          p   1-q
25          --------------
26     2n-1-k    1-p    q
27          --------------
28     """
29     return sum([comb(n,x)*comb(n-1,k-x)*(p**x)*((1-p)**(n-x))*((1-q)**(k-x))*(q**(n-1-k+x)) for k in range(n,2*n) for x in range(k+1-n,n+1)])
30
31 def random_winner(server):
32     return (1- server) if random.random() > prob[server] else server
33
34 def play(option):
35     pts = [0,0]
36     server = 0   
37     cnt = 0
38     while max(pts)<n: #sum(pts)<2*n-1:
39         winner = random_winner(server)
40         pts[winner] += 1 
41         cnt += 1
42         if option == 'as': # 'as': alternate serving
43             server = 1 - server
44         elif option == 'ws': # 'ws': winner serving
45             server = winner
46     # print '# of games:',cnt
47     # print 'final winner:', winner
48     return winner, cnt
49
50 def simulation(k):
51     option = ['as','ws'] # alternate serving vs. winner serving
52     prob = [1 - sum([play(o)[0] for i in range(k)])/(k*1.0) for o in option]
53     duration = [sum([play(o)[1] for i in range(k)])/(k*1.0) for o in option]
54     # the simulated prob should be close to the result of comp_prob(n,p,q)
55     return prob, duration


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论