我试图使用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时,一切都会中断:
from pymc import *
X = Uniform('X', mins, maxes)
@potential
def s(X=X):
cons1 = X[0] < 225
cons2 = X[0] > 405
cons3 = X.sum() >= 1000
if cons1 or cons2 or cons3:
return -inf
else:
return 0.0
mc = MCMC([X, s])
mc.sample(10000)错误是:“ZeroProbability:潜能s禁止其父母的当前值”
请你介绍一下这个问题的解决办法好吗?
发布于 2017-12-05 17:33:57
考虑从标准区间上的两个约束均匀随机变量中取样,如图所示。
棕色区域表示基于某些不等式的约束采样面积。对角线表示和。
注意:在2-空间中,棕色区域有一个区域(也称为概率或度量),但对角线上的区域为零,即为零概率或测度。
高维空间也是如此。

https://stackoverflow.com/questions/47652524
复制相似问题