cobb道格拉斯函数会极大地减慢运行速度。如何在Python中加速非线性计算?

2024-06-06 23:11:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个运作的微观经济模型,运行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}$

Tags: 模块key函数selfalpha程序运行代理quantity
1条回答
网友
1楼 · 发布于 2024-06-06 23:11:16

很难说如何在不查看其余代码的上下文的情况下修复它;但是有一件事可能会加快速度,那就是使用numpy预先计算虚拟数量。例如,您可以为每个代理的总余额sum\u限定值生成一个numpy数组,计算相应的虚拟数量数组,然后将其分配回代理。在

下面是一个高度简化的加速演示:

%%timeit
vals = range(100000)
new_vals = [v**0.5 for v in vals]
> 100 loops, best of 3: 15 ms per loop

现在,有了numpy:

^{pr2}$

然而,从几秒钟减速到3分钟对于计算的差异来说似乎是极端的。模型的行为是否与C-D函数相同,或者是驱动模型动力学的变化,而这些变化才是导致经济放缓的真正原因?如果是后者,那么您可能需要在其他地方寻找要优化的瓶颈。在

相关问题 更多 >