使用python进行约束随机数抽样(MonteCarlo,Markov链,pymc)

2024-06-25 06:42:17 发布

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

我尝试使用Python和pymc库对带有约束的随机数进行抽样。

这里mins和maxes是22个变量中每个变量的最小值和最大值的数组。在这种情况下效果很好。

from pymc import *
X = Uniform('X', mins, maxes)
@potential
def s(X=X): 
 cons1 = X[0] < 225
 cons2 = X[0] > 405
 if cons1 or cons2:
     return -inf
 else:
     return 0.0
mc = MCMC([X, s])
mc.sample(10000)

但是,当我试图再添加一个约束:变量总和必须等于1000时,一切都会中断:

^{pr2}$

错误是:“零概率:势能s禁止其父项的当前值”

你能推荐一些解决这个问题的办法吗?


Tags: fromimportreturndef情况uniform数组mc
1条回答
网友
1楼 · 发布于 2024-06-25 06:42:17

考虑从标准区间上的两个受约束的均匀随机变量进行抽样,如图所示。在

棕色区域表示基于一些不等式的约束采样区域。对角线代表总和。在

注意:在2-空间中,棕色区域有一个区域(也称为概率或测量值),但对角线有一个面积,即零概率或测量值。在

高维空间也是如此。在

two random variables

相关问题 更多 >