2012-03-20 68 views
2

有沒有人使用,並行SAmpler GEnerator?通過:使用示例

這可能對我很有用,但我發現的唯一文檔是Github上的三行README(https://github.com/cscherrer/passage)和Hackage上的簡潔API。

一個簡單的如何運行它的例子會很棒!

回答

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] 

和運行simluator:

main = genSimulator "myExample" (mySim xs0) 

這將創建一個採樣器使用OpenMP代碼的新目錄myExample