Summary:
Solving a simple DP problem (student stuff) .[embedded content] In case you want to solve the problem yourself, here’s a Python script yours truly made (assuming the utility function is of the natural log kind and with some explicit numerical parameterization): import numpy as np import matplotlib.pyplot as plt # Parameters beta = 0.9 # Discount factor r = 0.1 # Depreciation rate T = 3 # Time horizon k0 = 4.0 # Initial capital # Production function: f(k) = k^0.5 def f(k): return k**0.5 # Utility function: u(c) = ln(c), ensuring c > 0 def u(c): return np.log(c) if c > 0 else -np.inf # Discretize capital grid k_vals = np.linspace(0.1, 10, 100) # Initialize value function and policy storage V = [{} for _ in range(T + 1)] policy = [{} for
Topics:
Lars Pålsson Syll considers the following as important: Economics
This could be interesting, too:
Solving a simple DP problem (student stuff) .[embedded content] In case you want to solve the problem yourself, here’s a Python script yours truly made (assuming the utility function is of the natural log kind and with some explicit numerical parameterization): import numpy as np import matplotlib.pyplot as plt # Parameters beta = 0.9 # Discount factor r = 0.1 # Depreciation rate T = 3 # Time horizon k0 = 4.0 # Initial capital # Production function: f(k) = k^0.5 def f(k): return k**0.5 # Utility function: u(c) = ln(c), ensuring c > 0 def u(c): return np.log(c) if c > 0 else -np.inf # Discretize capital grid k_vals = np.linspace(0.1, 10, 100) # Initialize value function and policy storage V = [{} for _ in range(T + 1)] policy = [{} for
Topics:
Lars Pålsson Syll considers the following as important: Economics
This could be interesting, too:
tom writes Argentina’s labor reform: back to the past
tom writes The environmental crisis is driven by class interest
tom writes How the IMF and US helped loot and entrap Argentina with debt
tom writes Post Keynesian economics today: would Antonio Gramsci be cancelled?
Solving a simple DP problem (student stuff)
.
In case you want to solve the problem yourself, here’s a Python script yours truly made (assuming the utility function is of the natural log kind and with some explicit numerical parameterization):
import numpy as np
import matplotlib.pyplot as plt
# Parameters
beta = 0.9 # Discount factor
r = 0.1 # Depreciation rate
T = 3 # Time horizon
k0 = 4.0 # Initial capital
# Production function: f(k) = k^0.5
def f(k):
return k**0.5
# Utility function: u(c) = ln(c), ensuring c > 0
def u(c):
return np.log(c) if c > 0 else -np.inf
# Discretize capital grid
k_vals = np.linspace(0.1, 10, 100)
# Initialize value function and policy storage
V = [{} for _ in range(T + 1)]
policy = [{} for _ in range(T)]
# Terminal condition at T
for k in k_vals:
cT = f(k) + (1 - r) * k # Consume all resources at the last period
V[T][k] = u(cT) if cT > 0 else -np.inf # Ensure feasibility
# Backward induction
for t in range(T - 1, -1, -1): # t = 2, 1, 0
for k in k_vals:
best_c = 0
best_v = -np.inf
c_vals = np.linspace(0.1, f(k) + (1 - r) * k, 100) # Consumption choices
for c in c_vals:
k_next = f(k) + (1 - r) * k - c # Capital transition
if k_next < 0:
continue # Skip infeasible values
# Interpolate next period's value function
k_next_values = np.array(list(V[t + 1].keys()))
V_next_values = np.array(list(V[t + 1].values()))
V_next = np.interp(k_next, k_next_values, V_next_values)
value = u(c) + beta * V_next # Bellman equation
if value > best_v:
best_v = value
best_c = c
V[t][k] = best_v
policy[t][k] = best_c
# Compute optimal paths starting from k0
opt_c = []
opt_k = [k0]
for t in range(T):
k_current = opt_k[-1]
# Interpolate the optimal policy for k_current
k_policy_values = np.array(list(policy[t].keys()))
c_policy_values = np.array(list(policy[t].values()))
c_t = np.interp(k_current, k_policy_values, c_policy_values)
opt_c.append(c_t)
opt_k.append(f(k_current) + (1 - r) * k_current - c_t)
# Print results
print("Optimal Consumption Path:", opt_c)
print("Optimal Capital Path:", opt_k)
# Plot results
plt.figure(figsize=(10, 5))
plt.plot(range(T+1), opt_k, marker='o', label='Capital')
plt.plot(range(T), opt_c, marker='s', label='Consumption')
plt.xlabel("Time")
plt.ylabel("Value")
plt.legend()
plt.title("Optimal Capital and Consumption Paths")
plt.grid()
plt.show()
