基于有偏差的硬币抛掷 100 次的随机游走模拟
Random walk simulation based on the flipping of a biased coin 100 times
我 Python 开始。我正在尝试模拟一条直线(北和南)的随机游走,基于将有偏差的硬币抛 100 次,假设从起点到南为负,从起点到北为正。
我尝试了两种不同的方法,但它们都无法正常工作。
import random
def prob(p):
return random.random()<p
def random_walk(n):
heads=0
tails=0
t=0
for i in range(n):
if prob(0.3):
heads += 1
t=t-1
if prob (0.7):
tails += 1
t=t+1
print (heads, "heads")
print (tails, "tails")
print (t)
return t
heads=0
tails=0
t=0
for i in range(0,100):
if prob(0.3):
heads += 1
t=t-1
if prob(0.7):
tails += 1
t=t+1
print (heads, "heads")
print (tails, "tails")
print (t)
你做的不是掷硬币100次,而是200次!
每次调用 prob()
函数都是抛硬币。现在 for
循环的每次迭代都包含 2 次调用 - 首先是 0.3,然后是 0.7。
您正在寻找的可能类似于
for _ in range(n):
if prob(0.3):
heads +=1
else:
tails +=1
通过这种方式,您可以准确地进行 100 次抛掷(概率调用),并且每一次都是正面或反面。
此处的问题与您对 prob
函数的调用有关。由于您在 for i in range(n)
循环的每次迭代中调用该函数两次,因此您最终会得到两个不同的 RN。
此外,如果 random.random()
returns,比如 0.1
和 0.2
,那么与 if prob(0.3):
和 if prob(0.7):
关联的两个 if 块将在同一个模拟循环中执行。
您需要在每个执行循环中调用一次 random.random()
,并使两个 if 语句互斥 - 例如,将其更改为 if/else 块。
解决这些问题的方法如下:
for i in range(n):
coin_has_flipped_tails = prob(0.3)
if coin_has_flipped_tails:
tails += 1
t += 1
else: # this implies that the coin has flipped head
heads += 1
t -= 1
我 Python 开始。我正在尝试模拟一条直线(北和南)的随机游走,基于将有偏差的硬币抛 100 次,假设从起点到南为负,从起点到北为正。
我尝试了两种不同的方法,但它们都无法正常工作。
import random
def prob(p):
return random.random()<p
def random_walk(n):
heads=0
tails=0
t=0
for i in range(n):
if prob(0.3):
heads += 1
t=t-1
if prob (0.7):
tails += 1
t=t+1
print (heads, "heads")
print (tails, "tails")
print (t)
return t
heads=0
tails=0
t=0
for i in range(0,100):
if prob(0.3):
heads += 1
t=t-1
if prob(0.7):
tails += 1
t=t+1
print (heads, "heads")
print (tails, "tails")
print (t)
你做的不是掷硬币100次,而是200次!
每次调用 prob()
函数都是抛硬币。现在 for
循环的每次迭代都包含 2 次调用 - 首先是 0.3,然后是 0.7。
您正在寻找的可能类似于
for _ in range(n):
if prob(0.3):
heads +=1
else:
tails +=1
通过这种方式,您可以准确地进行 100 次抛掷(概率调用),并且每一次都是正面或反面。
此处的问题与您对 prob
函数的调用有关。由于您在 for i in range(n)
循环的每次迭代中调用该函数两次,因此您最终会得到两个不同的 RN。
此外,如果 random.random()
returns,比如 0.1
和 0.2
,那么与 if prob(0.3):
和 if prob(0.7):
关联的两个 if 块将在同一个模拟循环中执行。
您需要在每个执行循环中调用一次 random.random()
,并使两个 if 语句互斥 - 例如,将其更改为 if/else 块。
解决这些问题的方法如下:
for i in range(n):
coin_has_flipped_tails = prob(0.3)
if coin_has_flipped_tails:
tails += 1
t += 1
else: # this implies that the coin has flipped head
heads += 1
t -= 1