gpt4 book ai didi

javascript - 模拟虚拟世界 : continuous or discrete steps?

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:37 25 4
gpt4 key购买 nike

我正在制作类似于 Polyworld 的东西,这意味着我将模拟小爬行者在其中跑来跑去、进食和进化的虚拟世界。我正在用 Node.js 做,我计划使用物理和神经网络,但我不确定更新世界的最佳方式是什么,更具体地说,更新函数是否应该接收增量时间作为参数,或者每次都做同样的事情,独立于他们上次被调用的时间?这两种方式的好处是什么?

编辑:我反对连续更新的一点是我想实现某种间隔,例如,每 20 模拟秒生成一个食物 block 。如果 dt 不同于 1(或 1 的分数),这将永远无法精确工作。

话又说回来,如果我使用离散更新,其中更新不关心经过了多少时间,我将无法“减慢时间”。当我让它在功能强大的服务器上运行并在浏览器中呈现时,我认为更新会经常发生,我需要一种在不影响模拟的情况下减慢时间的方法,这样我就可以看到发生了什么。

最佳答案

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

newState = f(oldState, deltaSteps)

关于你说的速度问题,不要直接把你的迭代映射到时间上。定义一个中间时间单位(步骤),然后将此单位时间映射到毫秒、迭代次数或您喜欢的内容。因此,如果您要提高或降低仿真速度,只需更改用于从步进转换到时间/迭代的因子。如果您需要改变速度,只需改变您的常量即可。

检查这个page对模拟技术有一些了解。

关于javascript - 模拟虚拟世界 : continuous or discrete steps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081140/

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