繁体   English   中英

使用 OpenTURNS 的连续和离散变量

[英]Continuous and discrete variables with OpenTURNS

如何使用 OpenTURNS 创建具有连续和离散随机变量的实验设计?

我知道我们可以这样做:

X0 = ot.Normal()
X1 = ot.Normal()
distribution  = ot.ComposedDistribution([X0,X1])

但这只会创建一个连续的联合分布,我可以从中采样。 但是如何创建连续变量和离散变量的联合分布呢? 那我可以从中取样吗?

实际上,总的来说,OpenTURNS 在连续分布和离散分布之间没有太大区别。 所以,一旦我们创建了一个Distribution ,我们所要做的就是使用getSample方法来获取一个简单的 Monte-Carlo 样本。 以下示例表明,我们可以通过创建 LHS 实验设计进一步推动这一想法。

为了创建分布的第一个边缘,我们选择单变量离散分布。 其中许多,如Bernoulli分布或Geometric分布,都在库中实现。 在此示例中,我们选择为值 -2、-1、1 和 2 分配相等权重的UserDefined分布。然后我们首先使用getSample方法创建蒙特卡罗实验,然后使用MonteCarloExperiment方法。 可以基于此分布生成任何其他类型的实验设计,这就是我们最终展示如何创建 LHS(拉丁超立方体)实验的原因。

import openturns as ot
sample = ot.Sample([-2., -1., 1., 2.],1)
X0 = ot.UserDefined(sample)
X1 = ot.Normal()
distribution = ot.ComposedDistribution([X0,X1])
# Monte-Carlo experiment, simplest version
sample = distribution.getSample(10)
print(sample)
# Monte-Carlo experiment
size = 100
experiment = ot.MonteCarloExperiment(distribution, size)
sample = experiment.generate()

以下脚本生成关联的图形。

graph = ot.Graph("MonteCarloExperiment", "x0", "x1", True, "")
cloud = ot.Cloud(sample, "blue", "fsquare", "")
graph.add(cloud)
graph

之前的脚本打印:

    [ v0         X0         ]
0 : [  2         -0.0612243 ]
1 : [  1          0.789099  ]
2 : [ -1          0.583868  ]
3 : [ -1          1.33198   ]
4 : [ -2         -0.934389  ]
5 : [  2          0.559401  ]
6 : [ -1          0.860048  ]
7 : [  1         -0.822009  ]
8 : [  2         -0.548796  ]
9 : [ -1          1.46505   ]

并生成以下图形:

混合离散和连续样本

在同一分布上创建 LHS 很简单。

size = 100
experiment = ot.LHSExperiment(distribution, size)
sample = experiment.generate()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM