Akka用于模拟

Dag*_*Dag 7 simulation bigdata akka

我是akka和演员模式的新手,因此我不确定它是否符合我的需求.

我想用akka和数以百万计的实体(想象为域对象 - 后来的演员)创建一个可以相互影响的模拟.因此,我们认为模拟具有或多或少的"模糊"结果,我们有一个带有实体的数组,其中每个实体都有一个速度,但却被实际实体前面的实体所阻挠.当模拟开始时,每个实体应该移动n个字段,或者如果被其他实体阻止,则移动更少的字段.我们有多次迭代,最后我们有了一个新的订单.在一些轮次中重复这一过程,直到我们想要看到前导实体的"快照"(然后可能在下一轮开始之前将其删除).

所以我不明白我是否可以用akka创建它,因为:

是否有可能拥有每个演员位置的全局列表,因此他们知道他们在哪个位置以及哪个位于他们面前?据我了解,这违反了演员的封装.我可以把演员的位置放在演员本身,但是我怎样才能看到/通知演员周围的演员?除此之外,全局列表将产生同步问题并影响性能,这与期望的行为完全相反(并且与akka/actor模式互补)

我错过了什么?我是否必须寻找其他设计方法?谢谢你的建议.

更新:使用eventbus和分类器似乎也不是一个选择.参考文档:

"因此它不适合使用订阅频率变化非常高的情况"

cos*_*cos 2

演员模型非常适合您的场景。Actor 通过发送消息进行通信,因此每个 Actor 都可以向其邻居发送包含其位置的消息。当然,每个参与者无法了解系统中的所有其他参与者(无论如何效率不高),因此您还必须设计一个方案,通过该方案每个参与者都知道哪些是他的邻居。

至于获得系统的快照,只需有一个人人都知道并且认识所有人的中心参与者即可。

看来你才刚刚开始接触演员。多读一点 - akka 网站是一个很好的资源 - 如果需要的话,回来完善你的问题。

你的问题听起来像是n 体模拟之类的事情,所以研究一下这个问题可能也会有所帮助。