Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _solve_via_vfi(jv):
"compute policy rules via value function iteration"
v_init = jv.x_grid * 0.6
V = compute_fixed_point(jv.bellman_operator, v_init,
max_iter=3000,
error_tol=1e-5)
return V
def _solve_via_vfi(cp, v_init, return_both=False):
"compute policy rule using value function iteration"
v = compute_fixed_point(cp.bellman_operator, v_init, verbose=False,
error_tol=1e-5,
max_iter=1000)
# Run one more time to get the policy
p = cp.bellman_operator(v, return_policy=True)
if return_both:
return v, p
else:
return p
"gets a new set of solution objects and updates the data file"
# compute value function and policy rule using vfi
v_init = np.zeros(len(sp.grid_points)) + sp.c / (1 - sp.beta)
v = compute_fixed_point(sp.bellman_operator, v_init, error_tol=_tol,
max_iter=5000)
phi_vfi = sp.get_greedy(v)
# also run v through bellman so I can test if it is a fixed point
# bellman_operator takes a long time, so store result instead of compute
new_v = sp.bellman_operator(v)
# compute policy rule using pfi
phi_init = np.ones(len(sp.pi_grid))
phi_pfi = compute_fixed_point(sp.res_wage_operator, phi_init,
error_tol=_tol, max_iter=5000)
# write all arrays to file
write_array(f, grp, v, "v")
write_array(f, grp, phi_vfi, "phi_vfi")
write_array(f, grp, phi_pfi, "phi_pfi")
write_array(f, grp, new_v, "new_v")
# return data
return v, phi_vfi, phi_pfi, new_v
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
from matplotlib import cm
import quantecon as qe
from career import CareerWorkerProblem
# === set matplotlib parameters === #
plt.rcParams['axes.xmargin'] = 0
plt.rcParams['axes.ymargin'] = 0
plt.rcParams['patch.force_edgecolor'] = True
# === solve for the value function === #
wp = CareerWorkerProblem()
v_init = np.ones((wp.N, wp.N))*100
v = qe.compute_fixed_point(wp.bellman_operator, v_init,
max_iter=200, print_skip=25)
# === plot value function === #
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
tg, eg = np.meshgrid(wp.theta, wp.epsilon)
ax.plot_surface(tg,
eg,
v.T,
rstride=2, cstride=2,
cmap=cm.jet,
alpha=0.5,
linewidth=0.25)
ax.set_zlim(150, 200)
ax.set_xlabel('theta', fontsize=14)
ax.set_ylabel('epsilon', fontsize=14)
Authors: John Stachurski and Thomas Sargent
LastModified: 11/08/2013
"""
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
from matplotlib import cm
import quantecon as qe
from quantecon.models import CareerWorkerProblem
# === solve for the value function === #
wp = CareerWorkerProblem()
v_init = np.ones((wp.N, wp.N))*100
v = qe.compute_fixed_point(wp.bellman_operator, v_init)
# === plot value function === #
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
tg, eg = np.meshgrid(wp.theta, wp.epsilon)
ax.plot_surface(tg,
eg,
v.T,
rstride=2, cstride=2,
cmap=cm.jet,
alpha=0.5,
linewidth=0.25)
ax.set_zlim(150, 200)
ax.set_xlabel('theta', fontsize=14)
ax.set_ylabel('epsilon', fontsize=14)
plt.show()
phi_f = lambda p: interp(p, sp.pi_grid, phi) # Turn phi into a function
new_phi = np.empty(len(phi))
for i, pi in enumerate(sp.pi_grid):
def integrand(x):
"Integral expression on right-hand side of operator"
return npmax(x, phi_f(q(x, pi))) * (pi * f(x) + (1 - pi) * g(x))
integral, error = fixed_quad(integrand, 0, sp.w_max)
new_phi[i] = (1 - beta) * c + beta * integral
return new_phi
if __name__ == '__main__': # If module is run rather than imported
sp = SearchProblem(pi_grid_size=50)
phi_init = np.ones(len(sp.pi_grid))
w_bar = compute_fixed_point(res_wage_operator, sp, phi_init)
fig, ax = plt.subplots()
ax.plot(sp.pi_grid, w_bar, linewidth=2, color='black')
ax.set_ylim(0, 2)
ax.grid(axis='x', linewidth=0.25, linestyle='--', color='0.25')
ax.grid(axis='y', linewidth=0.25, linestyle='--', color='0.25')
ax.fill_between(sp.pi_grid, 0, w_bar, color='blue', alpha=0.15)
ax.fill_between(sp.pi_grid, w_bar, 2, color='green', alpha=0.15)
ax.text(0.42, 1.2, 'reject')
ax.text(0.7, 1.8, 'accept')
plt.show()
"""
Simulate job / career paths and compute the waiting time to permanent job /
career. In reading the code, recall that optimal_policy[i, j] = policy at
(theta_i, epsilon_j) = either 1, 2 or 3; meaning 'stay put', 'new job' and
'new life'.
"""
import matplotlib.pyplot as plt
import numpy as np
from quantecon import DiscreteRV, compute_fixed_point, CareerWorkerProblem
wp = CareerWorkerProblem()
v_init = np.ones((wp.N, wp.N))*100
v = compute_fixed_point(wp.bellman,v_init)
optimal_policy = wp.get_greedy(v)
F = DiscreteRV(wp.F_probs)
G = DiscreteRV(wp.G_probs)
def gen_path(T=20):
i = j = 0
theta_index = []
epsilon_index = []
for t in range(T):
if optimal_policy[i, j] == 1: # Stay put
pass
elif optimal_policy[i, j] == 2: # New job
j = int(G.draw())
else: # New life
i, j = int(F.draw()), int(G.draw())
theta_index.append(i)
from quantecon import compute_fixed_point
gm = GrowthModel()
w = 5 * gm.u(gm.grid) - 25 # To be used as an initial condition
discount_factors = (0.9, 0.94, 0.98)
series_length = 25
fig, ax = plt.subplots()
ax.set_xlabel("time")
ax.set_ylabel("capital")
for beta in discount_factors:
# Compute the optimal policy given the discount factor
gm.beta = beta
v_star = compute_fixed_point(gm.bellman_operator, w, max_iter=20)
sigma = gm.compute_greedy(v_star)
# Compute the corresponding time series for capital
k = np.empty(series_length)
k[0] = 0.1
sigma_function = lambda x: interp(x, gm.grid, sigma)
for t in range(1, series_length):
k[t] = gm.f(k[t-1]) - sigma_function(k[t-1])
ax.plot(k, 'o-', lw=2, alpha=0.75, label=r'$\beta = {}$'.format(beta))
ax.legend(loc='lower right')
plt.show()
from quantecon import compute_fixed_point
from matplotlib import pyplot as plt
import numpy as np
from quantecon import ConsumerProblem
r_vals = np.linspace(0, 0.04, 4)
fig, ax = plt.subplots()
for r_val in r_vals:
cp = ConsumerProblem(r=r_val)
v_init, c_init = cp.initialize()
c = compute_fixed_point(cp.coleman_operator, c_init)
ax.plot(cp.asset_grid, c[:, 0], label=r'$r = %.3f$' % r_val)
ax.set_xlabel('asset level')
ax.set_ylabel('consumption (low income)')
ax.legend(loc='upper left')
plt.show()