SPB Git

spb/wp29_uqo

Public
5.4 KB · 40 lines markdown
1# F5-conf-04 — VFI vs closed-form policy, optimal growth with log utility23## Question4A planner maximises Σ β^t ln c_t subject to y_{t+1} = (y_t − c_t)^α (Cobb–Douglas, full depreciation, productivity 1). We compare the closed-form solution of V(y) = max_{0<c<y} {ln c + β V((y−c)^α)} with value-function iteration (VFI) on the prescribed grid, at y = 0.5, 1, 2, and at V(1).56## Data and exclusions7Only `data/model.csv` (10 parameter rows, `n_input_rows`) is used: α = 0.36, β = 0.95, a grid of 400 points equally spaced in ln y on [0.05, 5] (`grid_points_used`, `n_analysed`), VFI tolerance 1e-8, evaluation points 0.5, 1.0, 2.0. Nothing was excluded (`out/exclusions.csv`, 10 → 10). The SHA-256 matches the bundle manifest (`out/state/data_audit.md`). None of the evaluation points is a grid node; see `data_issues`.89## Method10**Closed form (guess and verify).** Guess V(y) = A + B ln y. The right-hand side is ln c + β(A + Bα ln(y−c)). The first-order condition 1/c = αβB/(y−c) gives c = y/(1+αβB). Matching the ln y coefficients gives B = 1 + αβB, so B = 1/(1−αβ). Then c(y) = (1−αβ) y and the savings rate is (y−c)/y = αβ. Matching the constants gives A = [ln(1−αβ) + (αβ/(1−αβ)) ln(αβ)]/(1−β). With these parameters, B = 1.5198 (`diag_closed_form_B`) and A = −19.5244 (`diag_closed_form_A`). This rests on four assumptions: log utility; Cobb–Douglas technology y' = k^α with 0<α<1; full depreciation, with productivity normalised to 1; and an interior solution (0 < c < y, guaranteed because ln c → −∞ at c→0 and ln(y−c) → −∞ at c→y). Both functions are concave, so the first-order condition is sufficient. As a numerical check, brute-force maximisation of the Bellman right-hand side at y = 1 recovers V(1) and c = 0.658 to about 1e-13 (`out/state/checks.md`, item 2).1112**Contraction.** The Bellman operator T is monotone, and it discounts: T(V + a) = TV + βa. By Blackwell's sufficient conditions it is therefore a contraction in the sup norm with modulus β = 0.95 (`contraction_modulus`). One caveat: ln is unbounded, so on all of (0, ∞) the argument needs a weighted norm. On the compact grid used here, every per-period utility is finite and the bounded-function argument applies directly.1314**VFI.** We use discrete-choice VFI on the prescribed grid. For each grid point y_i, the choice is next-period output y'_j on the same grid, with consumption c_ij = y_i − (y'_j)^{1/α}. Infeasible pairs (c ≤ 0) get −∞. Iteration starts at V_0 = 0 and stops when ‖V_{n+1} − V_n‖_∞ < 1e-8. The closed form is never used inside the VFI. The policy c(y_i) comes from the argmax. Values at the off-grid evaluation points are linear interpolations in ln y between neighbouring nodes. No randomness is involved (`random_seed` = null).1516## Results17| y | closed form c | VFI c |18|---|---|---|19| 0.5 | 0.329 (`c_closed_y05`) | 0.32882 (`c_num_y05`) |20| 1.0 | 0.658 (`c_closed_y1`) | 0.65899 (`c_num_y1`) |21| 2.0 | 1.316 (`c_closed_y2`) | 1.30963 (`c_num_y2`) |2223- The largest absolute policy discrepancy across the three points is 0.00637 (`max_abs_error_policy`), at y = 2. That is about 0.5% of consumption.24- V(1) is −19.52441 from the closed form (`value_closed_y1`) and −19.52476 from VFI (`value_num_y1`), a gap of −3.4e-4 utils (`diag_value_error_y1`).25- The closed-form savings rate is αβ = 0.342 (`savings_rate_closed_form`). This is the baseline.26- VFI met the stopping rule after 361 iterations (`n_iterations`), with a final sup change of 9.997e-9 (`final_sup_change`). Status is `feasibility` = "complete".2728## Uncertainty29The model is deterministic, so there is no sampling uncertainty. The numerical error has two parts.301. **Iteration error.** It is bounded by β/(1−β)·‖V_n − V_{n−1}‖ = 1.9e-7 utils (`diag_vfi_error_bound_beta_over_1mbeta_times_final_change`). This is negligible.312. **Discretisation and interpolation error.** This part dominates. It depends on the log grid step of 0.01154 (`diag_grid_log_step`). Because y' is restricted to grid nodes, the implied capital k = y'^{1/α} moves in relative steps of about 0.0115/α ≈ 3.2%. The policy is therefore a step function, and its error is of the order of the grid spacing. Over all 400 nodes, the maximum policy error is 0.0251 (`diag_max_abs_policy_error_on_grid`), largest at high y, where absolute steps are bigger. The maximum value error is 4.8e-4 utils (`diag_max_abs_value_error_on_grid`).3233The value function converges much more tightly than the policy. This is expected, because the objective is flat near its optimum.3435## Limitations and open issues36- **Scope.** The validation covers a single parameter point (α = 0.36, β = 0.95), one grid (400 log-spaced points on [0.05, 5]) and one tolerance. It does not show accuracy for other parameters, grids, or for models without a closed form, such as partial depreciation or CRRA utility other than log.37- **Grid truncation.** The bounds were checked: the optimal y' never hits a grid bound (`diag_policy_hits_lower_bound` = `diag_policy_hits_upper_bound` = 0).38- **Off-grid evaluation.** The evaluation points 0.5, 1, 2 are not grid nodes, so the VFI numbers include interpolation error on top of the discrete-choice error (recorded in `data_issues`). A continuous-choice VFI would reduce the policy error. We did not use one, to stay within the prescribed design.39- The discrete-choice formulation is a modelling choice made within the prescribed design, not a change to it. It is documented in `data_issues`.40
Files · main
Menu

Theme