Непрерывные и дискретные переменные с OpenTURNS - PullRequest
0 голосов
/ 11 декабря 2019

Как создать план экспериментов с непрерывными и дискретными случайными переменными с OpenTURNS?

Я получаю, что мы можем сделать:

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

Но это создает только непрерывное совместное распределение, из которого я могу взять образец из. Но как создать совместное распределение непрерывной и дискретной переменных? Могу ли я взять с него образец?

1 Ответ

0 голосов
/ 11 декабря 2019

На самом деле, в общем, OpenTURNS не имеет большого значения для непрерывного и дискретного распределений. Итак, как только мы создали Distribution, все, что нам нужно сделать, это использовать метод getSample, чтобы получить простой образец Монте-Карло. Следующий пример показывает, что мы можем продвинуть идею немного дальше, создав план экспериментов LHS.

Чтобы создать первый маргинальный предел распределения, мы выбираем одномерное дискретное распределение. Многие из них, например, дистрибутивы Bernoulli или Geometric, реализованы в библиотеке. В этом примере мы выбираем распределение UserDefined, которое присваивает равные веса значениям -2, -1, 1 и 2. Затем мы создаем эксперимент Монте-Карло сначала методом getSample, а затем методом MonteCarloExperiment,На основе этого распределения может быть сгенерирован любой другой тип дизайна экспериментов, и именно поэтому мы наконец покажем, как создать эксперимент LHS (Latin Hypercube).

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   ]

и создает следующую графику:

Mixed discrete and continuous sample

Создать LHS в одном и том же дистрибутиве просто.

size = 100
experiment = ot.LHSExperiment(distribution, size)
sample = experiment.generate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...