2012-03-20 3 views
2

誰でも、PArallel SAmpler GEneratorを使用しましたか?パッセージ:使用例

潜在的には私にとって非常に役に立つかもしれませんが、私が見つけた唯一のドキュメントはGithub(https://github.com/cscherrer/passage)の3行のREADMEとHackageの簡潔なAPIです。

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

答えて

2

Passageには、2つの重要なモナドがあります(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] 

をしてsimluatorを実行します。

main = genSimulator "myExample" (mySim xs0) 

はこれが作成されます新しいディレクトリmyExampleとサンプラー用のOpenMPコード。