我试图设置一个动态规划问题:
import numpy as np
from scipy.optimize import minimize
from scipy.interpolate import interp1d
alpha = 1
beta = 0.5
nabla = 0.5
A = 1
delta = 1
rho = 1
grid_max=10
grid_size=250
grid = np.linspace(1e-5, grid_max, grid_size)
def u(x):
return np.log((x[0]**alpha)*x[0]**(beta+nabla))
def f(x):
return A*x
def k_plus(k,x):
return f(k)+(1-delta)-x[0]-x[1]
def obj_fun(x,k,v_array):
"""note v_array is our guess of v evaluated at the grid points.
we then interpolate in between"""
v = interp1d(grid, v_array)
return u(x) + rho*v(k_plus(k,x))
x_prueba = [2,2]
k=10
objetivo = lambda x: (-1)*obj_fun(x,k,np.log(grid))
minimize(objetivo, x0=[0,0], bounds=[(0, None), (0,None)],
constraints={"type": "ineq", "fun": lambda x: -x[0] - x[1] + 10})
为了便于计算,这些参数的值是这样的,但它们当然是不同的。 我得到的最新错误是: 超出迭代限制
我很感激你的帮助,如果这个问题不合适,请告诉我,以便解决它
我使用的是python3.6.9和scipy1.3.3。您的代码运行良好,只是最小化操作没有收敛。这是因为您从
x0 = [0, 0]
开始,它在u(x)
中使用,然后计算log(0)
。如果您提供一个不同的x0(直到[5,4],然后它停止收敛),它就可以工作了。稍微重写一下(例如,您不需要interp1d,因为您要插值的只是一个自然对数),这看起来像:这个指纹
相关问题 更多 >
编程相关推荐