我尝试使用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禁止其父项的当前值”
你能推荐一些解决这个问题的办法吗?
考虑从标准区间上的两个受约束的均匀随机变量进行抽样,如图所示。在
棕色区域表示基于一些不等式的约束采样区域。对角线代表总和。在
注意:在2-空间中,棕色区域有一个区域(也称为概率或测量值),但对角线有一个面积,即零概率或测量值。在
高维空间也是如此。在
相关问题 更多 >
编程相关推荐