搞懂三个应用概率耦合方法的经典实例

搞懂三个应用概率耦合方法的经典实例

  • 概述
  • 实例一:随机行走
  • 实例二:偏性掷硬币
  • 实例三:随机数字游戏

学前班的小朋友问我概率耦合是什么,我搜了搜,发现有点意思,刚好博客又没人写,所以就有了下文。。。

概述

概率耦合(probability coupling)是一种方法或者说技巧,处理的对象是相互独立的随机变量,在不改变随机变量的分布前填下,赋予随机变量之间依赖关系。其本质是提炼了独立随机变量之间某些属性的数值关系,讲这种数值关系变成依赖关系。类似时间换空间。下面将给出三个具体的例子,最后一个例子附有python代码实现。

实例一:随机行走

著名的随机行走模型有许多实际应用,如高分子链模型去算回旋半径,其实也是因为这个模型基于对自然现象:布朗运动。现在我们就以随机行走这个模型来说明概率耦合。假设有一个粒子在棋盘上随机行走,有一面镜子,镜子中的棋子的行走完全是这个棋子的镜像。或者说完全依赖于这个真实棋子的行走。但是我们分开来观察的话就好像都是独立地在随机行走。类似于两个独立的随机行走模型,虽然他们之间是相互依赖的,但是我们只关心他们的属性,即是不是都在随机行走。

实例二:偏性掷硬币

现有两个有偏差的硬币A,B,A硬币出现正面的概率是p,B硬币出现正面的概率是q,
且q>p,现在这两枚硬币出现正面的事件是相互独立的。也就是说即使B硬币比A硬币出现正面的几率大,但是在同时投掷这两枚硬币也很有可能出现A是正面而B是背面的情况。那么如何把这两个独立事件转换成相互依赖的事件并表现出q>p的关系呢
下面介绍两种等价的方法。

  • X代表一系列抛掷A硬币的实验,X=1:代表正面,X=0:代表反面,Y也是代表一类实验,且当X=1时,Y=1,X=0时,Y有(q-p)/(1-p)的概率取值为1。简单计算可以得到Y的概率分布和B硬币是一致的。有上述规则可以看出1)Y依赖于X ;2)X是正面是Y一定是正面
    1 × p + ( 1 − p ) × q − p 1 − p = q 1\times p+ (1-p)\times\frac{q-p}{1-p}=q 1×p+(1p)×1pqp=q
  • 同上, X代表一系列抛掷A硬币的实验,X=1:代表正面,X=0:代表反面,Y代表一系列抛掷B硬币的实验,设计一个新的硬币C,C有(q-p)/(1-p)的概率出现正面。Z代表一系列抛掷C硬币的实验。现在同时抛A,C两枚硬币,由于A,C出现正面是相互独立的事件。由于 q = 1 × p + ( 1 − p ) × q − p 1 − p q=1\times p+ (1-p)\times\frac{q-p}{1-p} q=1×p+(1p)×1pqp,可得下式,也可以得到和上面一样的结论。
    Y = X ∪ Z Y=X\cup Z Y=XZ

实例三:随机数字游戏

游戏规则;假设有100个格子被0-9的数字随机填充。然后两个人开始的时候随机从面前的10个格子里面选一个格子,并向前走格子上的数目步(如果是0则走10步)。重复之,一直到走过终点,记录最后一个走到的数字。这里提前剧透一下,这两个人最后走的数字是相同的概率97.4%,这个概率其实是格子数的函数,格子越多,这个概率月接近于1。听到这个结果是不是感觉这么随机的一个实验,怎么确有一个这么必然的结果呢,读者们可以联系概率耦合的概念好好想想,反正我是没想明白,但是我做了下面的实验验证了确实如此。

  • 生成100个0~9随机数填充格子(代码中的10代替0)
import random
count_num = 200
def generate_list():
    num_list = []
    for i in range(0,count_num):
        randint = random.randint(1, 10)
        num_list.append(randint)
    return num_list
  • 模拟实验
def play(num_list):
    begin = random.randint(1, 10)
    present_posi = begin
    while present_posi < count_num:
        present_num = num_list[present_posi-1]
        present_posi = present_posi + present_num
        #print(present_num)
    return present_num
  • 重复100次实验,注意是用同一个随机生成的100个数字
    for i in range(100):
        print(play(num_list))
  • 实验结果
    搞懂三个应用概率耦合方法的经典实例_第1张图片
  • 100个随机数字相同的概率不是百分百,可从实验观察到对于有些随机生成的100个数字,最后落在数字的不一定相同。
for j in range(10):
    num_list=generate_list()
    init = play(num_list)
    for i in range(100):
        last_hit = play(num_list)
        if last_hit != init:
            print(last_hit)

你可能感兴趣的:(python,概率论)