我有一個大型的哲學參數數據集,每個數據集都連接到其他參數,作爲給定語句的證明或反證。根語句可以有許多證明和反駁,每個證據也可以有證據和反駁。語句也可以在多個圖中使用,並且可以在「給定上下文」或假設下分析圖。我需要構造一個相關參數的貝葉斯網絡,以便每個節點都公平,準確地傳播影響它的連接參數;我需要能夠同時計算連接節點鏈的概率,每個節點都需要數據存儲區查找,必須阻止獲取結果;該進程主要是I/O綁定的,並且我的數據存儲連接可以在java,go和python {google appengine}中異步運行。一旦每次查找完成,它就會將效果傳播到所有其他連接的節點,直到概率增量降到低於無關閾值(當前爲0.1%)。流程的每個節點必須計算連接鏈,然後總結所有查詢中的所有結果以調整有效性結果,並將結果鏈接到任何連接的參數外部。使用Google Go的Goroutines創建貝葉斯網絡
爲了避免無限循環,我正在考慮在goroutines中使用類似A *的過程來將更新傳播到參數映射,並且基於複合影響的啓發式忽略節點,一旦影響概率下降, 0.1%。我試圖用SQL觸發器來設置計算,但它太複雜而且雜亂。然後我轉移到谷歌appengine利用異步nosql的優勢,這是更好,但仍然太慢。我需要以足夠快的速度運行更新以獲得精彩的用戶界面,所以當用戶創建或投票贊成或反對證明或反對時,他們可以立即看到UI中反映的結果。
我認爲Go是支持我需要的併發的語言,但我願意接受建議。客戶端是一個單一的JavaScript應用程序,它只是使用XHR和websocket實時推送和拉取自變量映射{及其更新}。我有一個Java原型,可以在10〜15s內計算大型連鎖,但對性能的監控表明我的大部分運行時間在ConcurrentHashMap中同步和開銷都是浪費的。
如果還有其他高度並行的語言值得嘗試,請告訴我。我知道java,python,go,ruby和scala,但是如果它適合我的需求,它會學習任何語言。
同樣,如果有大型貝葉斯網絡的開源實現,請留下建議。
一個有趣的應用程序,但究竟是什麼問題? – Sonia
具體來說,我想知道是否有任何先例/行業標準用於計算巨大的貝葉斯網絡,以及是否有goroutines像這樣的工作最適合這個工作。 – Ajax