Прохождение: пример использования - PullRequest
2 голосов
/ 20 марта 2012

Кто-нибудь использовал Passage , PArallel SAmpler GEnerator?

Потенциально это может быть очень полезно для меня, но единственная документация, которую я нашел, - это README из трех строк на Github (https://github.com/cscherrer/passage), и краткий API на Hackage.

Простой пример того, какбежать было бы здорово!

1 Ответ

2 голосов
/ 23 мая 2012

На высоком уровне, в Passage есть две важные монады, о которых нужно помнить: BayesianNetwork и BayesianSimulator.

Сначала вы строите модель в монаде BayesianNetwork:

myModel :: Int -> BayesianNetwork (Node, Node, [Node])
myModel n = do
  mu <- normal 0 0.001
  tau <- improperScale
  xs <- replicateM n $ normal mu tau
  return (mu, tau, xs)

Это указывается как генеративная модель, поэтому все, что не является случайным (здесь число точек данных n), должно быть передано в качестве параметра. В качестве альтернативы, мы могли бы поставить дистрибутив на n.

Далее мы строим симулятор, который вызывает модель:

mySim :: [Double] -> BayesianSimulator ()
mySim xs0 = do
  setThreadNum 4
  let n = length xs0
  (mu, tau, xs) <- model $ myModel n
  forM (zip xs xs0) $ \(x, x0) -> observe x x0
  monitor mu
  monitor tau

Наконец, возьмем некоторые данные:

xs0 = [1, -1, 2, 2, 2, -2]

и запустить симлуатор:

main = genSimulator "myExample" (mySim xs0)

Это создает новый каталог myExample с кодом OpenMP для сэмплера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...