首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python (Monte-Carlo,Markov链,pymc)进行约束随机数抽样

用python (Monte-Carlo,Markov链,pymc)进行约束随机数抽样
EN

Stack Overflow用户
提问于 2017-12-05 11:27:26
回答 1查看 874关注 0票数 0

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

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

代码语言:javascript
复制
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时,一切都会中断:

代码语言:javascript
复制
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禁止其父母的当前值”

请你介绍一下这个问题的解决办法好吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-05 17:33:57

考虑从标准区间上的两个约束均匀随机变量中取样,如图所示。

棕色区域表示基于某些不等式的约束采样面积。对角线表示和。

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

高维空间也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47652524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档