F5-conf-04 — VFI vs closed form, optimal growth with log utility
Question
A planner maximises Σ β^t ln c_t subject to y_{t+1} = (y_t − c_t)^α (full depreciation, productivity 1). We derive the
closed-form policy and value function, solve the same problem by value-function iteration (VFI) on the prescribed grid,
and compare them at y = 0.5, 1, 2 and (for the value) at y = 1. Parameters from data/model.csv: α = 0.36, β = 0.95.
Data and exclusions
data/model.csv (10 rows, n_input_rows; SHA-256 0981239614…6195b) holds theoretical parameters only. No rows were
excluded (out/exclusions.csv); all 400 grid points were analysed (grid_points_used, n_analysed). No deviations
from the prescribed design were needed (data_issues = []). None of the evaluation points is a grid node, so the VFI
policy and value are interpolated (linearly in ln y), as TASK.md allows. Audit details: out/state/data_audit.md.
Method
Closed form (guess-and-verify). Guess V(y) = A + B ln y. The RHS of the Bellman equation is
ln c + β[A + Bα ln(y − c)]. The FOC 1/c = αβB/(y − c) gives c = y/(1 + αβB). Matching coefficients on ln y:
B = 1 + αβB ⇒ B = 1/(1 − αβ), so c(y) = (1 − αβ) y and the savings rate is (y − c)/y = αβ. Matching constants:
A = [ln(1 − αβ) + (αβ/(1 − αβ)) ln(αβ)] / (1 − β). The verification holds exactly; we also checked numerically that
a continuous optimiser applied to the Bellman RHS with this V returns c = (1 − αβ)y and TV = V (out/state/checks.md).
Assumptions: log utility, Cobb–Douglas technology y' = k^α with 0<α<1, full depreciation, productivity normalised to 1,
interior solution (0 < c < y, guaranteed by the Inada property of ln and of k^α), 0<β<1, and the transversality condition
(satisfied since V is A + B ln y with finite A, B and log output is stationary).
Contraction. On the compact grid, with feasible choices and bounded utilities, the Bellman operator T satisfies
Blackwell's sufficient conditions: monotonicity (V ≤ W ⇒ TV ≤ TW) and discounting (T(V + a) = TV + βa). Hence T is a
contraction in the sup norm with modulus β = 0.95 (contraction_modulus). (On the unbounded continuous domain ln c is
unbounded; there the result is obtained on the restricted/compact state space or with weighted norms — the discretised
problem is bounded, which is what we iterate on.)
VFI. Grid: 400 points equally spaced in ln y on [0.05, 5]. The choice variable is next-period output y' restricted
to the grid; consumption is c = y − y'^{1/α}, and pairs with c ≤ 0 are infeasible (utility −∞). Start V0 = 0; iterate
V_{n+1}(y_i) = max_j {ln c_ij + β V_n(y_j)} until sup|V_{n+1} − V_n| < 1e-8. The policy is the argmax at the final V.
The closed form is never used inside the VFI. No randomness (random_seed = null). Code: out/analysis.py.
Results
The baseline (closed form) gives a savings rate αβ = 0.342 (savings_rate_closed_form).
| y | closed form c | VFI c |
|---|---|---|
| 0.5 | 0.329 (c_closed_y05) |
0.328818 (c_num_y05) |
| 1.0 | 0.658 (c_closed_y1) |
0.658994 (c_num_y1) |
| 2.0 | 1.316 (c_closed_y2) |
1.309625 (c_num_y2) |
- Maximum absolute policy discrepancy over the three points: 0.00637 at y = 2 (
max_abs_error_policy), i.e. below 0.5% of consumption at each point. - V(1): closed form −19.52441 (
value_closed_y1), VFI −19.52476 (value_num_y1); gap ≈ 3.4e-4 utils. - VFI converged in 361 iterations (
n_iterations) with final sup-norm change 1.0e-8 < 1e-8 tolerance (final_sup_change);feasibility= "complete". - Diagnostic (in
results.json→diagnostics): no grid node chooses a boundary y'; across all 400 nodes the max policy error is 0.025 (at large y, where c ≈ 3.3) and the max value error 4.8e-4.
Uncertainty
The problem is deterministic; there is no sampling uncertainty. Numerical error has two sources:
(i) iteration error, bounded by β·tol/(1 − β) = 1.9e-7 utils in V (from contraction_modulus and the 1e-8 tolerance);
(ii) discretisation/interpolation error: y' is restricted to a grid with ln-step 0.0115, so the required investment
y'^{1/α} jumps by ≈ 3.2% per step, which bounds the consumption error to a fraction of a percent of y — consistent with
the observed relative errors (−0.06%, +0.15%, −0.48%). The V(1) gap (3.4e-4) far exceeds bound (i), so it is
discretisation error. Errors shrink as the grid is refined (smaller ln-step), not by tightening the tolerance.
Limitations and open issues
- Validation scope: a single parameter point (α = 0.36, β = 0.95), one grid (400 log-spaced points on [0.05, 5]), one tolerance, discrete choice over grid nodes with linear-in-ln y interpolation at off-grid points. Other interpolation schemes (e.g. continuous choice with interpolated V) would give different (typically smaller) discrepancies; we did not run grid-refinement studies because the task does not require them.
- The policy error is not monotone in y; it reflects where the evaluation point falls relative to grid nodes.
- The contraction argument applies to the bounded discretised problem; the continuous log-utility problem is unbounded and needs the standard restricted-domain argument.