1

我已经使用 Python 对象在 Python 中实现了我自己的基于代理的模型 (ABM)。具体来说,这是一个Virus对象和Host对象的模型,其中Virus对象存在于Host对象中(存储在一个列表中),可以与其他Virus对象交换基因,并且可以在Host对象接触时传递给另一个Host对象。

OOP 方式使其灵活且易于编程,但如果不使用 PyPy 或 numba 或将一些代码移至 Cython,我将很难加快速度。加速总是好的,所以我不会在这里讨论我为什么要这样做。

不过,我在这里的问题更为根本。是否可以对此类模型进行矢量化?或者这种模型的层次结构和相互依赖的性质是否使得使用向量和矩阵在逻辑上不可能实现?

4

1 回答 1

1

已经几天没有任何回应,所以我会看看我是否可以进行辩论。我对 Python 不够熟悉,无法给出明确的答案。但这可能取决于您尝试编码的交互细节(代理之间,或代理与其环境之间)。如果可以接受以下操作:

1/ 根据当前情况计算每个代理的行为并存储在“下一个时间步”变量中

2/ 将变量更新为它们的“下一个时间步”值

那么原则上应该没有问题。但这正是 ABM 构建者经常使用专门的 ABM 语言(例如 NetLogo)或 OOP 语言的原因。你可以看看Repast Py如何处理这些问题。

于 2015-11-20T08:26:37.260 回答