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:
- Iteration error. At most 1.9e‑7 utils (
diag_vfi_error_bound_tol), which is negligible. - 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.