Monte Carlo 模拟器的第一步
First steps in a Monte Carlo simulator
我正在开发一个简单的 monte carlo 模拟器,以查看在破产前达到目标的概率。计划是创建一个函数,首先检查财富是否达到目标,如果没有,则生成随机数,将它们与选定的概率值进行比较,并根据赌徒的输赢上下移动财富。我希望此函数 return 包含 100 个 1 和 0 的列表,但我得到的是 k + 或 - 1。我在这里做错了什么?还有,我怎样才能让这个更干净?
import numpy as np
from numpy import random
# Variables
k = 5 #starting fortune
g = 10 #goal. Amount of money at which the gambler stops playing.
p = .5 #probability of winning
bet = 1 #bet size
def goal_or_bust(set_size=100):
global k
made_goal = []
for i in range(set_size):
if k <= 0:
made_goal.append(0)
break
elif k >= g:
made_goal.append(1)
break
else:
rand01 = np.random.rand()
if rand01 <= p:
k = k + bet
return(k)
if rand01 > p:
k = k - bet
return(k)
return(made_goal)
goal_or_bust()
您在测试结果后立即退出函数。
rand01 = np.random.rand()
if rand01 <= p:
k = k + bet
return(k) # <<<< HERE
if rand01 > p:
k = k - bet
return(k) # <<<<< HERE
所以你的 for 循环只循环(迭代)一次。
至于清理你的代码,删除你的全局变量并使它们成为你函数的所有参数。
我正在开发一个简单的 monte carlo 模拟器,以查看在破产前达到目标的概率。计划是创建一个函数,首先检查财富是否达到目标,如果没有,则生成随机数,将它们与选定的概率值进行比较,并根据赌徒的输赢上下移动财富。我希望此函数 return 包含 100 个 1 和 0 的列表,但我得到的是 k + 或 - 1。我在这里做错了什么?还有,我怎样才能让这个更干净?
import numpy as np
from numpy import random
# Variables
k = 5 #starting fortune
g = 10 #goal. Amount of money at which the gambler stops playing.
p = .5 #probability of winning
bet = 1 #bet size
def goal_or_bust(set_size=100):
global k
made_goal = []
for i in range(set_size):
if k <= 0:
made_goal.append(0)
break
elif k >= g:
made_goal.append(1)
break
else:
rand01 = np.random.rand()
if rand01 <= p:
k = k + bet
return(k)
if rand01 > p:
k = k - bet
return(k)
return(made_goal)
goal_or_bust()
您在测试结果后立即退出函数。
rand01 = np.random.rand()
if rand01 <= p:
k = k + bet
return(k) # <<<< HERE
if rand01 > p:
k = k - bet
return(k) # <<<<< HERE
所以你的 for 循环只循环(迭代)一次。
至于清理你的代码,删除你的全局变量并使它们成为你函数的所有参数。