def bellman_operator(self, v):
"""
The Bellman operator. Including for comparison. Value function
iteration is not recommended for this problem. See the
reservation wage operator below.
Parameters
----------
v : array_like(float, ndim=1, length=len(?_grid))
An approximate value function represented as a
one-dimensional array.
Returns
-------
new_v : array_like(float, ndim=1, length=len(?_grid))
The updated value function
"""
# == Simplify names == #
f, g, ?, c, q = self.f, self.g, self.?, self.c, self.q
vf = LinearNDInterpolator(self.grid_points, v)
N = len(v)
new_v = np.empty(N)
for i in range(N):
w, ? = self.grid_points[i, :]
v1 = w / (1 - ?)
integrand = lambda m: vf(m, q(m, ?)) * (? * f(m)
+ (1 - ?) * g(m))
integral, error = fixed_quad(integrand, 0, self.w_max)
v2 = c + ? * integral
new_v[i] = max(v1, v2)
return new_v
评论列表
文章目录