学前班的小朋友问我概率耦合是什么,我搜了搜,发现有点意思,刚好博客又没人写,所以就有了下文。。。
概率耦合(probability coupling)是一种方法或者说技巧,处理的对象是相互独立的随机变量,在不改变随机变量的分布前填下,赋予随机变量之间依赖关系。其本质是提炼了独立随机变量之间某些属性的数值关系,讲这种数值关系变成依赖关系。类似时间换空间。下面将给出三个具体的例子,最后一个例子附有python代码实现。
著名的随机行走模型有许多实际应用,如高分子链模型去算回旋半径,其实也是因为这个模型基于对自然现象:布朗运动。现在我们就以随机行走这个模型来说明概率耦合。假设有一个粒子在棋盘上随机行走,有一面镜子,镜子中的棋子的行走完全是这个棋子的镜像。或者说完全依赖于这个真实棋子的行走。但是我们分开来观察的话就好像都是独立地在随机行走。类似于两个独立的随机行走模型,虽然他们之间是相互依赖的,但是我们只关心他们的属性,即是不是都在随机行走。
现有两个有偏差的硬币A,B,A硬币出现正面的概率是p,B硬币出现正面的概率是q,
且q>p,现在这两枚硬币出现正面的事件是相互独立的。也就是说即使B硬币比A硬币出现正面的几率大,但是在同时投掷这两枚硬币也很有可能出现A是正面而B是背面的情况。那么如何把这两个独立事件转换成相互依赖的事件并表现出q>p的关系呢
下面介绍两种等价的方法。
游戏规则;假设有100个格子被0-9的数字随机填充。然后两个人开始的时候随机从面前的10个格子里面选一个格子,并向前走格子上的数目步(如果是0则走10步)。重复之,一直到走过终点,记录最后一个走到的数字。这里提前剧透一下,这两个人最后走的数字是相同的概率97.4%,这个概率其实是格子数的函数,格子越多,这个概率月接近于1。听到这个结果是不是感觉这么随机的一个实验,怎么确有一个这么必然的结果呢,读者们可以联系概率耦合的概念好好想想,反正我是没想明白,但是我做了下面的实验验证了确实如此。
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
for i in range(100):
print(play(num_list))
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)