SPB Git

spb/wp29_uqo

Public

# F5-conf-04 — VFI vs closed-form policy, optimal growth with log utility

# Question

A planner maximises Σ β^t ln c_t subject to y_{t+1} = (y_t − c_t)^α. Bellman equation: V(y) = max_{0<c<y} { ln c + β V((y−c)^α) }. We derive the closed-form solution, solve the model numerically by value-function iteration (VFI) on the prescribed grid, and compare the two at y = 0.5, 1, 2.

# Data and exclusions

Only data/model.csv is used (n_input_rows = 10 rows; SHA-256 098123…6195b). The parameters are α = 0.36, β = 0.95, a log-spaced grid of 400 points on [0.05, 5], VFI tolerance 1e‑8, and evaluation points 0.5, 1.0, 2.0. No rows were excluded (out/exclusions.csv). There was no departure from the prescribed design. The evaluation points are not grid nodes, so interpolation was needed; this is recorded in data_issues. Grid points used: grid_points_used = n_analysed = 400.

# Method

Closed form (guess and verify). Assumptions: log utility, Cobb–Douglas technology y' = k^α with productivity 1, full depreciation, 0<α<1, 0<β<1, and an interior solution (0<c<y). Guess V(y) = A + B ln y. The first-order condition 1/c = βBα/(y−c) gives c = y/(1+αβB). Matching the coefficient on ln y gives B = 1 + αβB, so B = 1/(1−αβ). Then:

  • c(y) = (1 − αβ) y, and the savings rate is (y−c)/y = αβ (savings_rate_closed_form = 0.342, the baseline quantity).
  • A = [ln(1−αβ) + (αβ/(1−αβ)) ln(αβ)] / (1−β), so V(1) = A (value_closed_y1 = −19.5244; diag_closed_form_A, diag_closed_form_B = 1.5198).

The code checks that this solution satisfies the Bellman equation exactly (residual 0) and that it is the argmax of the right-hand side (state/checks.md).

VFI. The state is y on the prescribed log grid. The choice is next-period output y' taken from the same grid, which requires savings k = y'^{1/α} and gives consumption c = y − k. Infeasible choices (c ≤ 0) get utility −∞. Starting from V₀ = 0, we apply TV = max_j {u_ij + βV_j} until ‖TV − V‖_∞ < 1e‑8. The policy is then read off from the converged V. The closed form is never used inside the VFI. The VFI policy c(y) is interpolated linearly in y at the evaluation points, and V is interpolated linearly in ln y at y = 1. The method is deterministic, so no random seed is used (random_seed = null).

Contraction. The Bellman operator T is monotone (V ≤ W ⇒ TV ≤ TW) and discounts (T(V + a) = TV + βa). By Blackwell's sufficient conditions it is therefore a contraction in the sup norm with modulus β (contraction_modulus = 0.95). On (0,∞), log utility is unbounded, so this argument needs bounded returns. Those hold on the compact grid [0.05, 5], where every state has a feasible choice and returns are bounded. The modulus implies that after stopping, ‖V_n − V*_grid‖ ≤ β·tol/(1−β) = 1.9e‑7 (diag_vfi_error_bound_tol).

# Results

y closed form VFI key
0.5 0.32900 0.32882 c_closed_y05, c_num_y05
1.0 0.65800 0.65898 c_closed_y1, c_num_y1
2.0 1.31600 1.30959 c_closed_y2, c_num_y2
  • The maximum absolute policy error over the three points is 0.00641 (max_abs_error_policy), reached at y = 2 (relative error −0.49%). At y = 0.5 and y = 1 the relative errors are −0.06% and +0.15%.
  • Value at y = 1: VFI −19.52476 (value_num_y1) against closed form −19.52441 (value_closed_y1), a gap of about 3.4e‑4.
  • VFI converged after 361 iterations (n_iterations), with a final sup-norm change of 9.997e‑9 (final_sup_change).
  • On the full grid, the maximum errors are 0.0251 for the policy (diag_max_abs_policy_error_grid) and 4.8e‑4 for the value function (diag_max_abs_value_error_grid).
  • The optimal choice indices lie in [133, 276] (diag_policy_index_range), so the grid bounds never bind (diag_policy_hits_grid_boundary = false).

# Uncertainty

There is no statistical uncertainty: this is a deterministic computation on theoretical parameters. The numerical error has two parts:

  1. Iteration error. At most 1.9e‑7 utils (diag_vfi_error_bound_tol), which is negligible.
  2. Discretisation error (dominant). It comes from restricting y' to the grid. The log step is h = 0.01154 (diag_log_grid_step), so the implied savings k = y'^{1/α} can be off by up to about h/(2α) ≈ 1.6% in relative terms. This error grows with y in absolute terms (k is proportional to y), which is why the largest error is at y = 2. Interpolating between grid nodes adds a further small error.

The discretisation error shrinks as the grid gets finer (smaller h). It also depends on α, through the 1/α amplification from y' to k. It does not depend on the tolerance.

# Limitations and open issues

  • The numerical check covers only one parameter point (α = 0.36, β = 0.95) and one grid (400 log-spaced points on [0.05, 5]). It does not show that the VFI is accurate for other parameters, grids, or states outside [0.05, 5].
  • The VFI uses a discrete choice on the state grid. A continuous-choice VFI (interpolating V off the grid) would give smaller policy errors. It was not run because the task prescribes the grid.
  • The contraction argument with modulus β relies on bounded returns on the compact grid. The unbounded log utility on (0,∞) needs a weighted-norm argument, which we did not develop.
  • feasibility = "complete"; no required value is null.
Files · main
Menu

Theme