2

誰かPassage、PARallel SAmpler GENerator を使ったことがありますか?

私にとって非常に役立つ可能性がありますが、私が見つけた唯一のドキュメントは、Github の 3 行の README (https://github.com/cscherrer/passage) と、Hackage の簡潔な API です。

それを実行する方法の簡単な例は素晴らしいでしょう!

4

1 に答える 1

2

大まかに言うと、パッセージには覚えておくべき 2 つの重要なモナドがあります。BayesianNetworkBayesianSimulatorです。

まず、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 コードを含む新しいディレクトリが作成されます。

于 2012-05-23T17:04:16.257 に答える