如何在pym中实现简单的蒙特卡罗函数

2024-05-20 15:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图弄清楚如何在python中实现montecarlo函数,使用pymc复制douglashubbard在他的书How to Measure Anything中的电子表格

我的尝试是:

import numpy as np
import pandas as pd
from pymc import DiscreteUniform, Exponential, deterministic, Poisson, Uniform, Normal, Stochastic, MCMC, Model


maintenance_saving_range = DiscreteUniform('maintenance_saving_range', lower=10, upper=21)
labour_saving_range = DiscreteUniform('labour_saving_range', lower=-2, upper=9)
raw_material_range = DiscreteUniform('maintenance_saving_range', lower=3, upper=10)
production_level_range = DiscreteUniform('maintenance_saving_range', lower=15000, upper=35000)



@deterministic(plot=False)
def rate(m = maintenance_saving_range, l = labour_saving_range, r=raw_material_range, p=production_level_range):
    return (m + l + r) * p

model = Model([rate, maintenance_saving_range, labour_saving_range, raw_material_range, production_level_range])
mc = MCMC(model)

很遗憾,我收到一个错误:ValueError: A tallyable PyMC object called maintenance_saving_range already exists. This will cause problems for some database backends.

我怎么了?在


Tags: importrawasrangemaintenancelevelupperlower
1条回答
网友
1楼 · 发布于 2024-05-20 15:27:00

啊,这是一个复制粘贴错误。在

我叫了三个同名的发行版。在

这是有效的代码。在

import numpy as np
import pandas as pd
from pymc import DiscreteUniform, Exponential, deterministic, Poisson, Uniform, Normal, Stochastic, MCMC, Model
%matplotlib inline
import matplotlib.pyplot as plt

maintenance_saving_range = DiscreteUniform('maintenance_saving_range', lower=10, upper=21)
labour_saving_range = DiscreteUniform('labour_saving_range', lower=-2, upper=9)
raw_material_range = DiscreteUniform('raw_material_range', lower=3, upper=10)
production_level_range = DiscreteUniform('production_level_range', lower=15000, upper=35000)


@deterministic(plot=False, name="rate")
def rate(m = maintenance_saving_range, l = labour_saving_range, r=raw_material_range, p=production_level_range):
    #out = np.empty(10000)
    out = (m + l + r) * p
    return out
model = Model([rate, maintenance_saving_range, labour_saving_range, raw_material_range])
mc = MCMC(model)
mc.sample(iter=10000)

相关问题 更多 >