SPB Git

spb/wp29_uqo

Public

# 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.
Files · main
Menu

Theme