私は哲学的な議論の大きなデータセットを持っていますが、それぞれが他の議論に、特定のステートメントの証明または反証として接続します。ルートステートメントは多くの証明と反駁を持つことができ、それぞれの証明と反駁もあります。ステートメントは複数のグラフでも使用でき、グラフは「特定のコンテキスト」または仮定の下で分析できます。Google Goのゴルーチンを使用してベイズネットワークを作成する
関連する引数のベイジアンネットワークを構築する必要があるため、各ノードは接続された引数に影響を公正かつ正確に伝達します。結果を得るためにブロックしなければならないデータストアルックアップを必要とする各ノードで、接続されたノードのチェーンの確率を同時に計算できる必要があります。プロセスは主にI/Oバインドされており、データストアの接続はjava、go、python {google appengine}で非同期で実行できます。ルックアップが完了すると、確率デルタが無関係の閾値(現在は0.1%)を下回るまで、他のすべての接続ノードにエフェクトが伝播します。プロセスの各ノードは、一連の接続を計算し、すべてのクエリのすべての結果を合計して、結果が接続された引数の外側にチェーンされた有効性の結果を調整する必要があります。
私はゴルーチンでA *様のプロセスを使用して、引数マップに更新を伝播させ、影響の確率が一度低下するとノードを無視する複合的な影響に基づいたヒューリスティックを考えていました。 0.1%であった。私はSQLトリガで計算をセットアップしようとしましたが、複雑で面倒な方法が速すぎます。それから、私は非同期のnosqlを利用するためにGoogleのappengineに移りました。それは優れていましたが、まだ遅すぎました。私は、急なUIを取得するのに十分な速さでアップデートを実行する必要があるため、ユーザーが証明書または反駁に対して作成または投票したり、UIに反映された結果をすぐに見ることができます。
私は、必要な同時実行性をサポートするために、Goが選択した言語だと思いますが、私は提案を公開しています。クライアントは、引数マップ{とその更新情報}をリアルタイムでプッシュ/プルするためにXHRとウェブソケットを使用するモノリシックなjavascriptアプリケーションです。私は、10〜15秒で大きなチェーンを計算できるJavaプロトタイプを持っていますが、パフォーマンスの監視は、ほとんどのランタイムがConcurrentHashMapの同期とオーバーヘッドで無駄になっていることを示しています。
試してみる価値のある他の並行言語がある場合は、教えてください。私はjava、python、go、ruby、scalaを知っていますが、私のニーズに合っていれば言語を学ぶでしょう。
同様に、巨大なベイジアンネットワークのオープンソースの実装がある場合は、提案を残してください。
興味深いアプリケーションですが、正確にはあなたの質問は何ですか? – Sonia
まあ、具体的には、巨大なベイジアンネットワークを計算するための先例/業界の基準があるかどうか、そしてゴルーチンがこの仕事に最適に適合しているかどうかを知りたいと思っています。 – Ajax