我正在尝试使用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)
错误是:&#39; ZeroProbability:潜在的s禁止其父母&#39;当前值&#39;
你能否为这个问题推荐一些解决方案?