I am trying to sample random numbers with constraints using Python and pymc library.
Here mins and maxes are arrays of minimums and maximums for each of 22 variables. It works fine in this case.
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)
However when I try to add one more constraint: that sum of variables must be equal to 1000, everything breaks:
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)
Error is: 'ZeroProbability: Potential s forbids its parents' current values'
Could you please recommend some solutions to this problem?