Aja*_*jax 7 google-app-engine a-star bayesian go bayesian-networks
我有一个大的哲学论证数据集,每个参数都连接到其他参数作为给定语句的证明或反证.根声明可以有许多证明和反证,每个都可能有证明和反证.语句也可用于多个图形,并且可以在"给定上下文"或假设下分析图形.
我需要构建一个相关参数的贝叶斯网络,以便每个节点公平准确地传播影响它的连接参数; 我需要能够同时计算连接节点链的概率,每个节点都需要数据存储区查找,必须阻止才能获得结果; 该进程主要是I/O绑定,我的数据存储连接可以在java,go和python {google appengine}中异步运行.每次查找完成后,它会将效果传播到所有其他连接节点,直到概率增量低于不相关阈值{当前为0.1%}.进程的每个节点必须计算连接链,然后总结所有查询中的所有结果以调整有效性结果,结果向外链接到任何连接的参数.
为了避免无限重复,我想在goroutines中使用类似A*的过程将更新传播到参数映射,使用基于复合影响的启发式方法,一旦影响概率低于0.1%,就会忽略节点.我曾尝试使用SQL触发器设置计算,但它过于复杂和混乱.然后我转移到谷歌appengine利用异步nosql,它更好,但仍然太慢.我需要足够快地运行更新以获得快速的UI,因此当用户创建或投票赞成或反对证明或反证时,他们可以立即看到结果反映在UI中.
我认为Go是支持我需要的并发性的首选语言,但我愿意接受建议.客户端是一个单片的javascript应用程序,它只使用XHR和websockets实时推送和拉出参数映射{及其更新}.我有一个可以在10到15秒内计算大型链的java原型,但是对性能的监控表明我的大部分运行时都浪费在ConcurrentHashMap的同步和开销上.
如果还有其他高度并发的语言值得尝试,请告诉我.我知道java,python,go,ruby和scala,但如果它符合我的需要,它会学习任何语言.
同样,如果有大型贝叶斯网络的开源实现,请留下建议.
我认为很难说出你在问什么。也许你可以详细说明你的问题。
Goroutines 相当便宜,并且非常适合大量使用 XHR 或 Websockets 的现代 Web 应用程序(以及其他必须等待数据库响应之类的 I/O 绑定应用程序)。此外,Go 运行时还能够并行执行这些 Goroutines,因此 Go 也非常适合 CPU 密集型任务,这应该利用多核和本机编译语言的速度。
但您还应该记住,goroutine 和通道不是免费的。它们仍然需要一定量的内存,并且每个同步点(例如通道发送或接收)都有其成本。这通常不是问题,因为与数据库查询相比,同步非常便宜,但它可能不适合构建高效的贝叶斯网络,特别是如果每个 goroutine / 节点的实际工作与数据库查询相比可以忽略不计。同步开销。
每个并发程序的主要目标应该是尽可能避免共享可变性。因此,用 goroutine 和通道建模的贝叶斯网络可能是一个很好的教育示例,也是衡量 Go 通道实现性能的好方法,但它可能不是最适合您的问题。
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |