【问题标题】:First steps in a Monte Carlo simulator [closed]蒙特卡洛模拟器的第一步[关闭]
【发布时间】:2020-09-17 23:11:47
【问题描述】:

我正在开发一个简单的蒙特卡罗模拟器,以查看在破产前达到目标的概率。计划是创建一个函数,首先检查财富是否已达到目标,如果没有,则生成随机数,将它们与选定的概率值进行比较,并根据赌徒的输赢上下移动财富。我希望这个函数返回一个包含 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()

【问题讨论】:

  • 你的函数中有两个 return(k) 语句......它们可能不应该存在。

标签: python loops simulation gambling


【解决方案1】:

您将在测试结果后立即退出您的功能。

        rand01 = np.random.rand()
        if rand01 <= p:
            k = k + bet
            return(k) # <<<< HERE
        if rand01 > p:
            k = k - bet
            return(k) # <<<<< HERE

所以你的 for 循环只会循环(迭代)一次。

至于清理您的代码,删除您的全局变量并将它们作为函数的所有参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2021-01-06
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多