模拟虚拟世界:连续或离散的步骤?

cor*_*zza 7 javascript simulation performance node.js

我正在制作类似于Polyworld的东西,这意味着我将模拟虚拟世界,小爬行动物在那里奔跑,吃饭和进化.我用Node.js制作它,我计划使用物理和神经网络,但我不确定更新世界的最佳方法是什么,更具体地说,如果更新函数接收增量时间作为参数,或者每次做同样的事情,独立于他们最后一次被召唤的时间?这两种方式有什么好处?

编辑: 我反对不断更新的一点是我想要实现某种间隔,例如,每个20个模拟秒产生一个食物块.如果dt不同于1(或1的一小部分),这将永远不会正常工作.

然后,如果我使用离散更新,其中更新不关心已经过了多少时间,我将无法"减慢时间".当我在强大的服务器上工作并在浏览器中渲染时,我认为更新会经常发生,我需要一种减慢时间而不影响模拟的方法,所以我可以看到发生了什么.

kot*_*dir 2

如果您没有必须协作的多个代理(每个代理都有自己的线程)并且您不必处理流程问题的同步/事件,我建议您使用连续模拟。使用固定的时间步长并在每一步中改变你的世界状态。每个世界片段都使用以下函数更改其状态:

新状态 = f(旧状态, 增量步数)

关于您提到的速度问题,不要直接将迭代映射到时间。定义一个中间时间单位(步骤),并将该单位时间映射为毫秒、迭代或您喜欢的值。因此,如果您要提高或降低模拟速度,只需更改用于从步骤转换为时间/迭代的因子即可。如果您需要改变速度,只需改变常数即可。

查看此页面,了解有关模拟技术的一些见解。