gpt4 book ai didi

google-app-engine - 使用 Google Go 的协程创建贝叶斯网络

转载 作者:IT王子 更新时间:2023-10-29 01:15:03 26 4
gpt4 key购买 nike

我有一个很大的哲学论证数据集,每个论证都与其他论证相关联,作为给定陈述的证明或反证。一个根语句可以有很多证明和反证,每一个也可能有证明和反证。语句也可以用在多个图形中,图形可以在“给定上下文”或假设下进行分析。

我需要构建一个相关参数的贝叶斯网络,以便每个节点公平准确地传播影响到它连接的参数;我需要能够同时计算连接节点链的概率,每个节点都需要数据存储查找,必须阻塞才能获得结果;该过程主要受 I/O 限制,我的数据存储区连接可以在 java、go 和 python {google appengine} 中异步运行。每次查找完成后,它会将影响传播到所有其他连接的节点,直到概率增量降至无关阈值{当前为 0.1%} 以下。该过程的每个节点都必须计算连接链,然后汇总所有查询的所有结果以调整有效性结果,并将结果链接到任何连接的参数。

为了避免无限重复,我正在考虑在 goroutines 中使用类似 A* 的过程来传播对参数映射的更新,并使用基于复合影响的启发式算法,一旦影响概率低于 0.1,就会忽略节点%。我曾尝试使用 SQL 触发器来设置计算,但它变得太快变得复杂和困惑。然后我转向 google appengine 以利用异步 nosql,它更好,但仍然太慢。我需要足够快地运行更新以获得活泼的 UI,因此当用户创建或投票支持或反对证明或反证时,他们可以立即看到反射(reflect)在 UI 中的结果。

我认为 Go 是支持我需要的并发性的首选语言,但我愿意接受建议。客户端是一个单一的 javascript 应用程序,它只使用 XHR 和 websockets 实时推送和拉取参数映射{及其更新}。我有一个可以在 10 到 15 秒内计算大型链的 Java 原型(prototype),但性能监控显示我的大部分运行时间都浪费在同步和 ConcurrentHashMap 的开销上。

如果还有其他值得尝试的高并发语言,请告诉我。我知道 java、python、go、ruby 和 scala,但如果适合我的需要,我会学习任何语言。

同理,如果有庞大的贝叶斯网络的开源实现,欢迎提出建议。

最佳答案

我觉得很难说清楚你在问什么。也许您可以详细说明您的问题。

Goroutines 非常便宜,非常适合大量使用 XHR 或 Websockets 的现代 Web 应用程序(以及其他必须等待数据库响应和类似内容的 I/O 绑定(bind)应用程序)。此外,go 运行时还能够并行执行这些 goroutine,因此 Go 也非常适合 CPU 密集型任务,这些任务应该利用多核和 native 编译语言的速度。

但您还应该记住,goroutines 和 channel 不是免费的。它们仍然需要一定数量的内存,并且每个同步点(例如 channel 发送或接收)都会产生成本。这通常不是问题,因为与数据库查询相比,同步非常便宜,但它可能不适合构建高效的贝叶斯网络,特别是如果每​​个 goroutine/节点的实际工作与同步开销。

每个并发程序的主要目标应该是尽可能避免共享可变性。因此,使用 goroutine 和 channel 建模的贝叶斯网络可能是一个很好的教育示例,也是衡量 Go channel 实现性能的好方法,但它可能不是最适合您的问题。

关于google-app-engine - 使用 Google Go 的协程创建贝叶斯网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com