我有一个运作的微观经济模型,运行10个模块2000个代理,最多10年。程序运行速度很快,在几秒钟内就可以提供结果、输出和图形。在
然而,当我实现一个非线性的柯布-道格拉斯生产函数来更新公司的生产量时,程序慢了下来,在3分钟内产生结果,这取决于参数。在
有人知道我怎样才能加快计算速度并得到快速的结果吗?在
以下是函数代码: α=0.5
def update_product_quantity(self):
if len(self.employees) > 0 and self.total_balance > 0:
dummy_quantity = self.total_balance ** parameters.ALPHA * \
self.get_sum_qualification() ** (1 - parameters.ALPHA)
for key in self.inventory.keys():
while dummy_quantity > 0:
self.inventory[key].quantity += 1
dummy_quantity -= 1
之前快速工作的线性函数是:
^{pr2}$
很难说如何在不查看其余代码的上下文的情况下修复它;但是有一件事可能会加快速度,那就是使用numpy预先计算虚拟数量。例如,您可以为每个代理的总余额和sum\u限定值生成一个numpy数组,计算相应的虚拟数量数组,然后将其分配回代理。在
下面是一个高度简化的加速演示:
现在,有了numpy:
^{pr2}$然而,从几秒钟减速到3分钟对于计算的差异来说似乎是极端的。模型的行为是否与C-D函数相同,或者是驱动模型动力学的变化,而这些变化才是导致经济放缓的真正原因?如果是后者,那么您可能需要在其他地方寻找要优化的瓶颈。在
相关问题 更多 >
编程相关推荐