私は哲学的な議論の大規模なデータセットを持っており、それぞれが与えられたステートメントの証明または反証として他の議論に接続しています。ルートステートメントには多くの証明と反証が含まれる可能性があり、それぞれに証明と反証が含まれる場合があります。ステートメントは複数のグラフで使用することもでき、グラフは「与えられたコンテキスト」または仮定の下で分析できます。
各ノードが接続された引数に公平かつ正確に影響を伝播するように、関連する引数のベイジアンネットワークを構築する必要があります。接続されたノードのチェーンの確率を同時に計算できる必要があります。各ノードには、結果を取得するためにブロックする必要のあるデータストアルックアップが必要です。プロセスはほとんどI/Oバウンドであり、データストア接続はjava、go、python{googleappengine}で非同期に実行できます。各ルックアップが完了すると、確率デルタが無関係のしきい値{現在は0.1%}を下回るまで、接続されている他のすべてのノードに効果が伝播されます。プロセスの各ノードは、接続のチェーンを計算してから、すべてのクエリのすべての結果を合計して有効性の結果を調整する必要があります。結果は、接続された引数にチェーンされます。
無限に繰り返されるのを避けるために、私はゴルーチンでA *のようなプロセスを使用して、引数マップに更新を伝播することを考えていました。複利に基づくヒューリスティックは、影響の確率が0.1%を下回ると、ノードを無視します。SQLトリガーを使用して計算を設定しようとしましたが、複雑で面倒な方法が速すぎました。次に、非同期のnosqlを利用するためにGoogle AppEngineに移行しました。それは優れていましたが、それでも遅すぎました。迅速なUIを取得するために十分な速度で更新を実行する必要があるため、ユーザーが証明または反証を作成または賛成または反対すると、UIに反映された結果をすぐに確認できます。
Goは、必要な並行性をサポートするために選択する言語だと思いますが、私は提案を受け入れています。クライアントは、XHRとWebSocketを使用して引数マップ{およびその更新}をリアルタイムでプッシュおよびプルするモノリシックJavaScriptアプリです。私は10〜15秒で大きなチェーンを計算できるJavaプロトタイプを持っていますが、パフォーマンスの監視は、私のランタイムのほとんどがConcurrentHashMapからの同期とオーバーヘッドで浪費されていることを示しています。
試してみる価値のある他の非常に並行性の高い言語がある場合は、私に知らせてください。私はjava、python、go、ruby、scalaを知っていますが、自分のニーズに合っていれば、どの言語でも学習できます。
同様に、巨大なベイジアンネットワークのオープンソース実装がある場合は、提案を残してください。