如何并行化while循环?

时间:2019-02-22 04:40:44

标签: python numpy parallel-processing

我正在尝试执行值函数迭代(对于Aiyagari model)。我希望优化的循环在这里(编辑为包含MWE):


beta = 0.95
r =0.03
a_lb = -1.5
a_ub = 10
y_l = 0.9
y_h = 1.1
yGrid = [y_l, y_h]
aSz = 100
nstates = 2
V0 = np.zeros((nstates, aSz))
V1 = np.zeros((nstates, aSz))
aPol = np.zeros((nstates, aSz))
Tol = 0.0001
Iter_max = 300
err = 1.0
PI = np.matrix([[0.5, 0.5],[0.09, 0.91]])
aGrid = np.linspace(a_lb, a_ub, num = aSz)
#
#
#
Iter = 0
while (err> Tol) and (Iter < Iter_max):
    V0l= intp.interp1d(aGrid, V0[0,:])
    V0h= intp.interp1d(aGrid, V0[1,:])
    for a_today in range(aSz):
        for yix in range(nstates):

            def objective(a_tomorrow):                
                c = yGrid[yix] + (1+r)*aGrid[a_today] - a_tomorrow  

                exp_cont_Val = PI[yix,0] * V0l(a_tomorrow) + PI[yix,1] * V0h(a_tomorrow)
                return -(-1/c + beta* exp_cont_Val)

            minima_val = opt.fminbound(objective , a_lb, min(a_ub, yGrid[yix] + (1+r) *aGrid[a_today] -0.00001))
            aPol[yix, a_today] = minima_val
            V1[yix, a_today] = -objective(aPol[yix, a_today])


    err = (abs(V1-V0)).max()
    Iter = Iter+1
    V0=V1.copy()
print('Iteration ' + str( Iter) + ' with error ' + str( err))

这是更大的循环的一部分,该循环使用二分法为变量r查找值。 首先,我猜一个r的任意值,并用它来填充c数组中的值。根据我的测试,循环的第一部分非常快。对于第二部分(如上所述),我认为opt.fminbound的开销最大。我尝试使用jit,但我不断收到错误消息,我将不胜感激。

0 个答案:

没有答案