我想创建一个多智能体模拟程序,我正在考虑是否应该使用NumPy或numba来加速计算。基本上,我需要一个类来存储智能体的状态,并且我将有1000多个这些类的实例。在每个时间步骤中,我将为所有实例执行不同的计算。我正在考虑两种方法:
Numpy向量化:
使用1个类具有多个NumPy数组来存储所有智能体的状态。因此,在模拟期间,我将仅有1个类实例。通过这种方法,我可以简单地使用NumPy向量化来执行计算。但是,这将使特定智能体的函数运行变得困难,我需要额外的类来存储每个智能体的索引。
Numpy向量化:
使用1个类具有多个NumPy数组来存储所有智能体的状态。因此,在模拟期间,我将仅有1个类实例。通过这种方法,我可以简单地使用NumPy向量化来执行计算。但是,这将使特定智能体的函数运行变得困难,我需要额外的类来存储每个智能体的索引。
Class agent:
def __init__(self):
self.A = np.zeros(1000)
self.B = np.zeros(1000)
def timestep(self):
return self.A + self.B
Numba jitclass:
使用numba jitclass装饰器编译代码。采用这种方法,可以将更多标准的OOP格式化代码应用为一个类实例代表一个代理。然而,我不确定循环遍历多个jitclass实例(比如1000个或更多)的性能。
@jitclass
class agent:
def __init__(self):
self.A = 0
self.B = 0
def timestep(self):
return self.A + self.B
我想知道哪种方法会更快。