Noise-State Game Explorer · illustrated

How the Noise-State Solver Works

The algorithm behind the explorer, one step at a time. Most drawings are solved as you read, by the explorer’s own solver, on games from Chapters 1 and 3 of the dissertation. Loading the solver…

An equilibrium of these games is a set of kernels. A kernel D¹W,t(s) is how much player 1’s action at date t moves per unit of a shock that struck at an earlier date s. The pairs with s ≤ t make up the causal triangle, and each kernel is a function on it, one for every control and every shock.

The solver’s unknowns are the control kernels. The state’s kernel and every player’s beliefs follow from them by linear solves. The drawing is player 1’s kernel for the state shock w⁰ in the tracking game of Chapter 1: each curve fixes a date t and shows the response at t to a unit shock at time s.

The kernels in these drawings are responses to the primitive shocks. The dissertation writes a strategy differently, as a rule on the player’s noise-state: the estimates Ŵ¹t(u) = E[Wu | F¹t] of the past shocks, revised as new signals arrive. The strategy kernel D¹t(u) weights those estimates. Running the estimates back to the shocks gives the primitive-control response D¹W,t(s).

The drawing is player 1 in the tracking game of Chapter 1 at date t = 0.5, both kernels read off the solve. By Remark 1.13 player 1 acts on its estimate of the state price, D¹t = −E[Ht | F¹t]/(2r1), so the strategy kernel is the state price’s kernel, D¹t(u) = −Ht(u)/(2r1). The solver stores the kernel of the first-order condition, 2r1D¹W + H, and the drawing reads H off it. A shock that has just struck is not yet learned, so the action does not respond to it even though the weight on its estimate is largest. Player 1 sees its own noise in its signal at once and responds to it strongly; it responds little to player 2’s.

A kernel is stored by its values at a few points, its nodes. The triangle is mapped onto a square (a Duffy map), and 12 Chebyshev nodes go along each side, bunched toward the edges: 144 values per kernel. Between the nodes the kernel is the polynomial through them.

The kernels are smooth on the triangle, so 12 nodes per side give the Chapter 1 costs to about nine digits and the kernels to about five. The representation error in the drawing checks one requirement: a strategy must be a rule applied to what the player has seen. The solver rewrites each action kernel as such a rule and measures how far the rule’s action is from the kernel.

Solving the game means finding a fixed point. A candidate profile of strategies fixes what each player’s signals reveal, and so everyone’s beliefs. The beliefs fix each player’s best response. An equilibrium is a profile that is its own best response.

In the dissertation’s words: each map determines the other, so the profile must be solved as a fixed point.

Take one best response. Hold player 2’s strategy fixed and switch player 1’s off. What is left is player 1’s passive world. Player 1’s own actions move its signals in a known way, so subtracting them leaves signals with the same information that do not depend on player 1’s strategy.

Written as kernels on those signals, player 1’s action enters its first-order condition linearly. The passive world is solved forward in time. The value of a push at date t adds up its effects from t to the end, which is the shadow price of the dissertation’s backward equations. The best response is then a single linear solve, with no inner iteration.

The first-order condition sets the cost of effort against the value of a push, as far as player 1’s signals can tell it. The value has two parts. The physical part runs through the state. The information wedge runs through player 2: the push shows up in player 2’s signal, and player 2 revises their forecast and acts on it.

In the backward equation for the shadow price the wedge is one extra term (Theorem 1.8). The drawing shows both parts at every node, for the state shock w⁰.

The fixed point is found by iterating the best-response map G. The residual is the size of G(D) − D relative to D. The plain update moves halfway from D to G(D). Anderson acceleration remembers the last fifteen steps and their residuals and takes the combination of them with the smallest residual, fitted by least squares.

A small ridge term in that fit (Tikhonov regularisation) keeps repeated or zero directions from breaking it. If an accelerated step more than doubles the residual, the memory is cleared and a plain step is taken. If Anderson stalls, a Newton–Krylov polish (Newton’s method with its linear systems solved iteratively) takes over. Both runs in the drawing start from zero kernels.

The explorer does not start the iteration from zero. The solver first solves the same game at half the nodes, 6 per side, then interpolates that equilibrium onto the 12-node grid and carries on from there.

Evaluations on the coarse grid are cheap: the package’s notes put the whole coarse solve at the cost of a few fine evaluations.

Every solve carries a list of checks on the answer, each a measured number against a threshold. The second-order check asks whether a player’s loss, as a quadratic in its own strategy, curves up in every direction, so that the first-order condition found a minimum. Refinement solves again with 1.5 times the nodes and compares.

Stability is the spectral radius of the best-response map at the equilibrium, the factor by which a small deviation shrinks per round of best responses. Below 1, players who kept best-responding to each other would find it.

In a stationary game the calendar drops out and only ages remain: a kernel depends on how long ago the shock struck. The causal triangle becomes a lag quadrant, the quarter plane of two nonnegative ages: the age of the shock and the age of the belief about it.

The solver cuts the quadrant at a window L and stores kernels at Chebyshev nodes on [0, L], 32 of them here.

Cutting at L solves a slightly different game, one in which shocks older than L are forgotten. The window check measures how much a kernel still moves over the last tenth of the window, relative to its peak. Above 2% the window is too short.

The drawing solves the stationary game of Chapter 3 at three windows. A discount rate ρ on future losses changes the equilibrium but does not shorten these kernels: at a window of 2 the tail grows with ρ. In the Kyle–Back game of Chapter 4 a discount is what makes the stationary problem well posed at all.

A transition is a change of regime. The game has run in the old stationary equilibrium, and at date 0 player 1’s signal precision jumps from 1 to 6. Before 0 the old kernels hold, and shocks from before 0 are still remembered. On [0, T] the kernels are solved on the triangle. After T comes a buffer one window long, where strategies are frozen at the new stationary equilibrium.

The settled check measures, over the last window before T, how far the solved strategies still are from the new stationary ones, relative to their peak. Instead of fixing T, the solver can march: solve at T = L, lengthen T one window at a time with the earlier strategies held fixed, and stop once the settled check passes.

Skip to the end

The method is written up in the noisestate package (docs/method.md and docs/guards.md). The computation sections of Chapter 1 and Chapter 3 describe the schemes the dissertation’s figures were made with.

The finite game: dX = (D¹ + D²) dt + dW⁰, player i sees dYi = √pi X dt + dWi and minimises E∫01[(X − bi)² + ri(Di)²]dt with p1 = p2 = 9, r1 = r2 = 0.1, b = ±1, 12 nodes per side. The stationary game: the same state and signals with p1 = 3, p2 = 10, flow loss ½X² + ½ri(Di)², r1 = r2 = 1. The transition is the explorer’s regime-change preset: mean reversion a = 1, T = 6, window 3, 8 nodes. Every number marked as solved is computed in your browser when the page opens.