2026-02-09 16:15:41 +01:00
# Mathematical Foundations
2026-03-06 19:14:43 +01:00
This page develops the core mathematics underlying Optimiz-rs's Rust kernels — from first
principles through advanced theory. Each section opens with a **definition block** , builds
2026-03-07 09:44:08 +01:00
intuition through **examples and diagrams** , and closes with a **notebook micro-check** .
For complete walkthroughs see `examples/notebooks/` .
2026-02-09 16:15:41 +01:00
2026-03-06 19:14:43 +01:00
---
2026-02-09 16:15:41 +01:00
2026-03-06 19:14:43 +01:00
## 1 · Differential Evolution (DE)
2026-02-09 16:15:41 +01:00
2026-03-06 19:14:43 +01:00
### Background
2026-02-09 17:09:27 +01:00
2026-03-06 19:31:04 +01:00
DE is a gradient-free population-based optimizer for $f: \mathbb{R}^d \to \mathbb{R}$,
not required to be smooth or convex. At generation $g$ we maintain $N$ candidate
solutions $\{\mathbf{x}_{i,g}\} \subset \mathbb{R}^d$.
2026-02-09 17:27:35 +01:00
2026-03-06 19:31:04 +01:00
**Key insight:** The difference vector $\mathbf{x}_{r_2}-\mathbf{x}_{r_3}$ is an
unbiased directional finite-difference of $f$, so DE implicitly estimates curvature
2026-03-06 19:14:43 +01:00
without Jacobians.
2026-02-09 17:09:27 +01:00
2026-03-07 09:44:08 +01:00
### 1.1 Geometric Intuition — Mutation in $\mathbb{R}^2$
2026-03-07 11:29:04 +01:00
```{figure} ../_static/diagrams/fig_de_mutation.svg
:align: center
:alt: DE mutation geometry in R²
2026-03-07 09:44:08 +01:00
` ``
- $\mathbf{r}_1, \mathbf{r}_2, \mathbf{r}_3$ are three **distinct** randomly selected parents.
- The mutant $\mathbf{v}_i$ lands on the other side relative to $\mathbf{x}_{r_1}$.
- **Crossover** then mixes $\mathbf{v}_i$ and $\mathbf{x}_i$ dimension-by-dimension with
probability $CR$, producing trial vector $\mathbf{u}_i$.
- **Selection** keeps $\mathbf{u}_i$ only if it improves over $\mathbf{x}_i$ — pure greedy.
### 1.2 Operators
2026-02-09 17:09:27 +01:00
2026-03-06 19:31:04 +01:00
| Step | Formula | Role |
|------|---------|------|
| Mutation (rand/1) | $\mathbf{v}_{i,g} = \mathbf{x}_{r_1} + F(\mathbf{x}_{r_2}-\mathbf{x}_{r_3})$ | explore |
| Binomial crossover | $u_{i,j} = v_{i,j}$ if $U(0,1)<CR$ or $j=j_\text{rand}$ | mix dimensions |
| Greedy selection | $\mathbf{x}_{i,g+1} = \mathbf{u}_{i,g}$ iff $f(\mathbf{u})\le f(\mathbf{x})$ | exploit |
2026-02-09 17:09:27 +01:00
2026-03-06 19:31:04 +01:00
**Convergence (informal):** Under bounded population diversity and Lipschitz $f$, the
best-so-far value converges a.s. to a stationary point as $N,g\to\infty$ (Price et al. 2005).
2026-02-09 17:09:27 +01:00
2026-03-07 09:44:08 +01:00
### 1.3 Self-Adaptive jDE (Optimiz-rs default)
2026-02-09 17:09:27 +01:00
2026-03-06 19:31:04 +01:00
Parameters $F,CR$ are per-individual and reset stochastically each generation:
2026-02-09 17:09:27 +01:00
2026-03-06 19:31:04 +01:00
$$
F_i^{g+1} = \begin{cases} F_{\min} + r_1 F_{\max} & r_2 < \tau_1,\\ F_i^g & \text{otherwise,}\end{cases}
\qquad
CR_i^{g+1} = \begin{cases} U(0,1) & r_3 < \tau_2,\\ CR_i^g & \text{otherwise.}\end{cases}
$$
2026-02-09 17:27:35 +01:00
2026-03-06 19:31:04 +01:00
$\tau_1=\tau_2=0.1$ by default. On rugged landscapes this produces bimodal $F$
2026-03-06 19:14:43 +01:00
histograms concentrated near 0.8 — a sign the landscape is highly multimodal.
2026-02-09 17:09:27 +01:00
2026-03-07 09:44:08 +01:00
### 1.4 Example — Minimising the Rastrigin Function
The Rastrigin function $f(\mathbf{x}) = 10d + \sum_i[x_i^2 - 10\cos(2\pi x_i)]$
has $\approx 10^d$ local minima (global minimum $f^*=0$ at $\mathbf{x}^*=\mathbf{0}$).
**Why gradient methods fail:** The gradient $\partial_{x_i}f = 2x_i + 20\pi\sin(2\pi x_i)$
oscillates rapidly — any gradient step hops between basins.
**Why DE succeeds:** The difference vector $F(\mathbf{x}_{r_2}-\mathbf{x}_{r_3})$
spans the characteristic basin width (~1.0), enabling inter-basin jumps.
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_rastrigin.svg
:align: center
:alt: Rastrigin function 1D — many local minima with one global optimum at zero
2026-03-07 09:44:08 +01:00
` ``
**Typical jDE convergence** ($d=10$, $N=100$, $\tau_1=\tau_2=0.1$):
` ``
Gen Best f Mean F Mean CR
---- ------- ------- -------
1 48.3 0.50 0.50
50 12.1 0.78 0.31
200 3.4 0.82 0.24 <- F clusters near 0.8 (bimodal)
500 0.0 0.83 0.22 <- converged
` ``
::::{admonition} Tip — Diagnosing Stagnation
:class: tip
If best-$f$ does not decrease for 100+ generations:
1. **Check $F$ histogram.** Bimodal near 0.8 -> landscape is multimodal (increase $N$).
Collapsed near 0 -> diversity loss; restart with random perturbation.
2. **Check $CR$ distribution.** Uniform -> dimensions not interacting.
Collapsed near 0 -> DE treating dimensions independently (separable function).
3. **Increase $N$** to $\approx 10d$ for $d > 20$.
::::
2026-03-06 19:31:04 +01:00
**Notebook check** (` 05_performance_benchmarks.ipynb`): Plot $F_i, CR_i$ histograms
every 50 generations; expect values clustering in $[0.5,0.9]$ on hard problems.
2026-02-09 17:27:35 +01:00
2026-03-06 19:14:43 +01:00
---
2026-02-09 17:09:27 +01:00
2026-03-06 19:14:43 +01:00
## 2 · Stochastic Processes
2026-02-09 17:09:27 +01:00
2026-03-06 19:14:43 +01:00
These form the probabilistic backbone of all continuous-time models in Optimiz-rs.
2026-03-07 09:44:08 +01:00
We build the theory from scratch: random walk → Brownian motion → Itō calculus → SDEs → jump-diffusions.
---
2026-02-09 17:09:27 +01:00
2026-03-06 19:14:43 +01:00
### 2.1 Brownian Motion
2026-02-09 17:09:27 +01:00
2026-03-07 09:44:08 +01:00
#### 2.1.0 Intuitive Construction — From Random Walk to BM
**Step 1 — Discrete random walk.** Flip a fair coin $n$ times per unit time.
Define $\xi_k = +1$ (heads) or $-1$ (tails) i.i.d. After $n$ steps of size $1/\sqrt{n}$:
$$S^{(n)}_t = \frac{1}{\sqrt{n}}\sum_{k=1}^{\lfloor nt \rfloor} \xi_k.$$
By the **Central Limit Theorem**, as $n\to\infty$: $S^{(n)}_t \xrightarrow{d} W_t \sim \mathcal{N}(0,t)$.
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_random_walk.svg
:align: center
:alt: Coin-flip random walk converging to Brownian motion as n grows
2026-03-07 09:44:08 +01:00
` ``
**Step 2 — Scaling limit.** The normalization $1/\sqrt{n}$ is crucial:
- Without it, variance grows as $n$ (diverges).
- With $n^{-1/2}$: variance = $n \cdot (1/\sqrt{n})^2 \cdot t = t$ — exactly right.
This is why $W_t \sim \mathcal{N}(0,t)$: **variance accumulates linearly in time**.
2026-03-06 19:31:04 +01:00
::::{admonition} Definition — Wiener Process
:class: definition
2026-02-09 17:27:35 +01:00
2026-03-06 19:31:04 +01:00
A stochastic process $W = (W_t)_{t\ge 0}$ on $(\Omega,\mathcal{F},\mathbb{P})$
is a *standard Brownian motion* if:
2026-02-09 17:09:27 +01:00
2026-03-06 19:31:04 +01:00
1. $W_0 = 0$ a.s.
2. Increments are **independent**: $W_t - W_s \perp \mathcal{F}_s$ for $t>s$.
3. $W_t - W_s \sim \mathcal{N}(0, t-s)$ for all $0\le s<t$.
4. Paths $t\mapsto W_t(\omega)$ are **continuous** a.s.
::::
2026-02-09 17:27:35 +01:00
2026-03-07 09:44:08 +01:00
#### 2.1.1 Key Analytical Properties
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
| Property | Formula | Intuition |
|----------|---------|-----------|
| Mean | $\mathbb{E}[W_t] = 0$ | No drift — symmetric random walk |
| Variance | $\operatorname{Var}(W_t) = t$ | Uncertainty grows with time |
| Covariance | $\operatorname{Cov}(W_s,W_t) = \min(s,t)$ | Shared history up to first time |
| Non-differentiability | $\lim_{h\to 0}(W_{t+h}-W_t)/h$ diverges a.s. | Too "rough" for ordinary calculus |
| Quadratic variation | $[W]_T = T$ | Core source of Itō correction term |
| Self-similarity | $c^{-1/2}W_{ct} \overset{d}{=} W_t$ | Fractal structure, Hurst $H=\tfrac12$ |
**Quadratic variation derivation (step by step):**
Partition $[0,T]$ into $n$ pieces of width $\Delta = T/n$. Sum of squared increments:
$$\sum_{k=0}^{n-1}(W_{t_{k+1}}-W_{t_k})^2 \overset{?}{=} T \quad \text{as } n\to\infty.$$
**Step 1** — Each increment: $(W_{t_{k+1}}-W_{t_k})^2 \sim \Delta \cdot \chi_1^2$, so
$\mathbb{E}[(W_{t_{k+1}}-W_{t_k})^2] = \Delta$.
**Step 2** — Sum of means: $\sum_{k=0}^{n-1} \Delta = n\Delta = T$.
**Step 3** — Variance of the sum:
$\operatorname{Var}\!\left(\sum (W_{t_{k+1}}-W_{t_k})^2\right) = n \cdot 2\Delta^2 = 2T^2/n \xrightarrow{n\to\infty} 0$.
**Conclusion:** $\sum (W_{t_{k+1}}-W_{t_k})^2 \xrightarrow{L^2} T$. We write $dW_t^2 = dt$.
This **single identity** is the engine of all Itō calculus.
::::{admonition} Why dW² = dt is remarkable
:class: tip
In ordinary calculus, $dx^2 \approx dx \cdot dx \to 0$ (second-order infinitesimal).
For Brownian motion, $(dW)^2 = dt$ is **first-order** — it does **not** vanish!
Physically: BM paths oscillate so rapidly ($\sim t^{0.5}$ scale) that their squared
increments accumulate at rate $1$ — comparable to the drift $dt$.
This is the **only** reason Itō's lemma has an extra term.
::::
**Multiple sample paths** — the fan widens as $\propto\sqrt{t}$:
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_bm_fan.svg
:align: center
:alt: Brownian motion fan — multiple sample paths widening as sqrt(t)
2026-03-07 09:44:08 +01:00
` ``
2026-03-06 19:14:43 +01:00
**Example — Geometric BM:**
2026-03-06 19:31:04 +01:00
$S_t = S_0 \exp\!\bigl((\mu-\tfrac12\sigma^2)t + \sigma W_t\bigr)$
2026-03-07 09:44:08 +01:00
is the Black-Scholes price model. Log-normal marginals; continuous, nowhere-differentiable paths:
2026-03-06 19:14:43 +01:00
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_gbm.svg
:align: center
:alt: Geometric Brownian motion — log-normal price paths with drift and volatility
2026-03-07 09:44:08 +01:00
` ``
### 2.2 Itō Calculus
#### 2.2.0 Why You Cannot Use Ordinary Integration
Attempt to define $\int_0^T W_t\,dW_t$ using a Riemann sum: pick $W_{t_k}$ at the
**left endpoint** → get one answer; pick $(W_{t_k}+W_{t_{k+1}})/2$ (midpoint) → get a *different* answer.
This ambiguity occurs because $W$ is not of bounded variation. **Itō's convention**
(left endpoint) is the only one that produces a **martingale** — ensuring no look-ahead.
::::{admonition} Definition — Itō Integral
2026-03-06 19:31:04 +01:00
:class: definition
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
For adapted $f \in \mathcal{L}^2$ (i.e. $\mathbb{E}\!\int_0^T f_t^2\,dt < \infty$):
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
$$\int_0^T f_t\,dW_t \;:=\; L^2\text{-}\lim_{|\pi|\to 0} \sum_{k} f_{t_k}(W_{t_{k+1}}-W_{t_k}).$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
Key guarantees:
- **Zero mean:** $\mathbb{E}\!\left[\int_0^T f_t\,dW_t\right] = 0$.
- **Itō isometry:** $\mathbb{E}\!\left[\left(\int_0^T f_t\,dW_t\right)^2\right] = \mathbb{E}\!\int_0^T f_t^2\,dt$.
- **Martingale:** $M_t = \int_0^t f_s\,dW_s$ satisfies $\mathbb{E}[M_t\mid\mathcal{F}_s]=M_s$.
2026-03-06 19:31:04 +01:00
::::
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Itō isometry — proof sketch:**
Let $I_T = \sum_k f_{t_k}\Delta W_k$ (simple process). Then:
$$\mathbb{E}[I_T^2] = \sum_{j,k}\underbrace{\mathbb{E}[f_{t_j}\Delta W_j \cdot f_{t_k}\Delta W_k]}_{\text{cross terms}}$$
For $j \neq k$ (say $j < k$): $f_{t_j}\Delta W_j$ and $f_{t_k}$ are both $\mathcal{F}_{t_k}$-measurable,
while $\Delta W_k$ is **independent** of $\mathcal{F}_{t_k}$ with mean 0 → cross term $= 0$.
For $j = k$: $\mathbb{E}[f_{t_j}^2 (\Delta W_j)^2] = \mathbb{E}[f_{t_j}^2]\Delta t_j$ (independence of $f_{t_j}$ and $\Delta W_j$).
$$\Rightarrow \mathbb{E}[I_T^2] = \sum_k \mathbb{E}[f_{t_k}^2]\Delta t_k \xrightarrow{|\pi|\to 0} \mathbb{E}\int_0^T f_t^2\,dt. \quad \checkmark$$
#### 2.2.1 Itō's Lemma — Full Derivation
::::{admonition} Theorem — Itō's Lemma
2026-03-06 19:31:04 +01:00
:class: tip
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
For $dX_t = \mu_t\,dt + \sigma_t\,dW_t$ and $F \in C^{1,2}([0,T]\times\mathbb{R})$:
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
$$\boxed{dF(t,X_t) = \partial_t F\,dt + \partial_x F\,dX_t + \tfrac{1}{2}\sigma_t^2\,\partial_{xx}F\,dt}$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
Expanded:
$$dF = \underbrace{\left(\partial_t F + \mu_t\,\partial_x F + \tfrac12\sigma_t^2\,\partial_{xx}F\right)}_{\text{drift}}\,dt
+ \underbrace{\sigma_t\,\partial_x F}_{\text{diffusion}}\,dW_t.$$
2026-03-06 19:31:04 +01:00
::::
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Derivation — Taylor expand $F(t+dt, X_{t+dt})$:**
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
$$dF = \partial_t F\,dt + \partial_x F\,dX + \tfrac12\partial_{xx}F\,(dX)^2 + \underbrace{\partial_{tx}F\,dt\,dX + \ldots}_{\to 0} $$
Compute $(dX)^2$ using the **Itō multiplication table**:
| × | $dt$ | $dW_t$ |
|---|------|--------|
| $dt$ | $0$ | $0$ |
| $dW_t$ | $0$ | $dt$ |
$$\begin{aligned}
(dX_t)^2 &= (\mu_t\,dt + \sigma_t\,dW_t)^2 \\
&= \mu_t^2\underbrace{(dt)^2}_{0} + 2\mu_t\sigma_t\underbrace{dt\cdot dW_t}_{0} + \sigma_t^2\underbrace{(dW_t)^2}_{dt}\\
&= \sigma_t^2\,dt.
\end{aligned}$$
Substituting:
$$dF = \partial_t F\,dt + \partial_x F(\mu_t\,dt + \sigma_t\,dW_t) + \tfrac12\partial_{xx}F\cdot\sigma_t^2\,dt$$
$$= \left(\partial_t F + \mu_t\partial_x F + \tfrac12\sigma_t^2\partial_{xx}F\right)dt + \sigma_t\partial_x F\,dW_t. \quad \checkmark$$
**The extra term $\tfrac12\sigma^2\partial_{xx}F\,dt$ is the "Itō correction".**
In ordinary calculus $(dW)^2=0$, so it vanishes. In stochastic calculus, BM oscillates
so rapidly that $(dW)^2 = dt$ — a first-order effect.
**Multidimensional version** (for vector $\mathbf{X}\in\mathbb{R}^n$, matrix noise):
$$dF = \partial_t F\,dt + \sum_i \partial_{x_i}F\,dX_i + \tfrac12\sum_{i,j}\partial_{x_ix_j}F\,d[X_i,X_j]_t$$
where $d[X_i, X_j]_t = d\langle X_i, X_j\rangle_t$ is the quadratic co-variation.
#### 2.2.2 Worked Examples of Itō's Lemma
**Example 1 — GBM, derive explicit solution:**
SDE: $dS_t = \mu S_t\,dt + \sigma S_t\,dW_t$.
**Goal:** Find $S_t$ in closed form.
**Step 1** — Guess $F(t,x) = \log x$. Compute partials:
$\partial_t F = 0$, $\partial_x F = 1/x$, $\partial_{xx}F = -1/x^2$.
**Step 2** — Apply Itō's lemma:
$$d(\log S_t) = 0 + \frac{1}{S_t}\,dS_t + \tfrac12\cdot(-\tfrac{1}{S_t^2})\cdot\sigma^2 S_t^2\,dt$$
$$= \frac{\mu S_t\,dt + \sigma S_t\,dW_t}{S_t} - \tfrac12\sigma^2\,dt$$
$$= \left(\mu - \tfrac12\sigma^2\right)\,dt + \sigma\,dW_t.$$
**Step 3** — Integrate (deterministic integral + Itō integral):
$$\log S_T - \log S_0 = \left(\mu-\tfrac12\sigma^2\right)T + \sigma W_T.$$
**Step 4** — Exponentiate:
$$\boxed{S_T = S_0\exp\!\left[\left(\mu - \tfrac12\sigma^2\right)T + \sigma W_T\right].}$$
The **Itō correction** $-\tfrac12\sigma^2 T$ lowers the expected log-return:
$\mathbb{E}[\log S_T] = \log S_0 + (\mu-\tfrac12\sigma^2)T$,
but $\mathbb{E}[S_T] = S_0 e^{\mu T}$ (Jensen's inequality explains the gap:
$e^{\mathbb{E}[X]} < \mathbb{E}[e^X]$ for non-degenerate $X$).
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_ito_correction.svg
:align: center
:alt: Itō correction — expected log-return is always below the naive slope mu
2026-03-07 09:44:08 +01:00
` ``
**Example 2 — Itō product rule ($d(X_t Y_t)$):**
By Itō's lemma applied to $F(x,y) = xy$:
$$d(X_t Y_t) = Y_t\,dX_t + X_t\,dY_t + d[X,Y]_t$$
where $d[X,Y]_t = \sigma_X\sigma_Y\,dt$. Compare to ordinary calculus: $d(xy) = y\,dx + x\,dy$ (no cross term because $(dx)^2=0$).
**Example 3 — Integration by parts for stochastic integrals:**
$$\int_0^T W_t\,dW_t = \tfrac12 W_T^2 - \tfrac12 T.$$
Ordinary calculus would give $\int_0^T W_t\,dW_t = \tfrac12 W_T^2$.
The $-\tfrac12 T$ correction comes from the quadratic variation.
**Verification via Itō's lemma:** Set $F(t,x) = x^2/2$:
$dF = x\,dW + \tfrac12\cdot 1 \cdot dt = W_t\,dW_t + \tfrac12\,dt$.
Integrate: $\tfrac12 W_T^2 - 0 = \int_0^T W_t\,dW_t + \tfrac12 T$ → result follows. ✓
#### 2.2.3 Itō vs Stratonovich
| Property | Itō integral | Stratonovich integral ($\circ$) |
|----------|-------------|----------------------|
| Chain rule | Modified ($+\tfrac12\sigma^2\partial_{xx}F$ term) | Standard calculus chain rule |
| Martingale | Yes (if $f$ adapted) | No in general |
| Use in finance | Natural (no look-ahead) | Physics, geometry |
| Conversion | $\int f\circ dW = \int f\,dW + \tfrac12\int \partial_x f\,\sigma\,dt$ | (same identity) |
| SDE solutions | Different numerics needed | Standard ODE methods work |
**Conversion formula** — Itō $\to$ Stratonovich:
$$\int_0^T f(X_t)\circ dW_t = \int_0^T f(X_t)\,dW_t + \tfrac{1}{2}\int_0^T f'(X_t)\sigma_t\,dt.$$
**Rule of thumb:** Use Itō in finance (causality, no-arbitrage); use Stratonovich in
physics/differential geometry (coordinate-invariant chain rule).
### 2.3 General Itō SDEs
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$dX_t = b(t, X_t)\,dt + \boldsymbol{\sigma}(t, X_t)\,dW_t,\quad X_0 = x_0.$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
#### 2.3.0 Existence, Uniqueness and Picard Iteration
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
::::{admonition} Theorem — Strong Solution Existence (Picard– Lindelöf for SDEs)
:class: tip
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
If $b$ and $\sigma$ are **globally Lipschitz** in $x$ (uniformly in $t$):
$\|b(t,x)-b(t,y)\| + \|\sigma(t,x)-\sigma(t,y)\| \le L\|x-y\|$,
and satisfy **linear growth**: $\|b(t,x)\|^2 + \|\sigma(t,x)\|^2 \le C^2(1+\|x\|^2)$,
then there exists a **unique strong solution** with $\mathbb{E}\!\left[\sup_{t\le T}\|X_t\|^2\right] < \infty$.
::::
**Picard iteration — construct the solution step by step:**
Set $X_t^{(0)} = x_0$ (constant). For $n\ge 0$:
$$X_t^{(n+1)} = x_0 + \int_0^t b(s, X_s^{(n)})\,ds + \int_0^t \sigma(s, X_s^{(n)})\,dW_s.$$
**Intermediate step — bound the error:**
Let $\varepsilon_n(t) = \mathbb{E}\!\left[\sup_{s\le t}|X_s^{(n+1)}-X_s^{(n)}|^2\right]$.
By Doob's $L^2$-inequality and Lipschitz:
$$\varepsilon_{n+1}(t) \le 2(L^2 T + L^2)\int_0^t \varepsilon_n(s)\,ds.$$
By induction: $\varepsilon_n(t) \le C \cdot \frac{(2L^2(T+1)t)^n}{n!} \to 0$.
Geometric series → $X^{(n)}$ is Cauchy in $L^2$ → converges to the unique solution.
**Intuition:**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_picard.svg
:align: center
:alt: Picard iteration — successive approximations converging to the true SDE solution
2026-03-07 09:44:08 +01:00
` ``
#### 2.3.1 The Fokker-Planck Equation — How Densities Evolve
If $X_t$ has density $p(t,x)$, then $p$ satisfies the **Fokker-Planck (Kolmogorov forward) PDE**:
$$\frac{\partial p}{\partial t} = -\frac{\partial}{\partial x}[b(t,x)\,p] + \frac{1}{2}\frac{\partial^2}{\partial x^2}[\sigma^2(t,x)\,p].$$
**Derivation sketch:** For any test function $\phi$:
$$\frac{d}{dt}\mathbb{E}[\phi(X_t)] = \mathbb{E}[\mathcal{L}\phi(X_t)] = \mathbb{E}\!\left[b\,\phi' + \tfrac12\sigma^2\phi''\right]$$
using Itō's lemma on $\phi(X_t)$. Integration by parts in the $x$-integral transfers
derivatives from $\phi$ to $p$, giving the Fokker-Planck equation.
**Visual — density flows rightward (positive drift) and spreads (positive diffusion):**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_fokker_planck.svg
:align: center
:alt: Fokker-Planck evolution — probability density drifts right and broadens over time
2026-03-07 09:44:08 +01:00
` ``
**For OU: $b = \kappa(\theta-x)$, $\sigma$ = const** →
stationary solution $p_\infty(x) = \mathcal{N}(\theta, \sigma^2/2\kappa)$.
#### 2.3.2 Common SDE Reference Table
| Process | SDE | Closed-form $X_t$ | Stationary dist. | Use in Optimiz-rs |
|---------|-----|-------------------|-----------------|-------------------|
| Brownian motion | $dX = \sigma\,dW$ | $X_0 + \sigma W_t$ | — | Noise baseline |
| Geometric BM | $dX = \mu X\,dt + \sigma X\,dW$ | $X_0 e^{(\mu-\sigma^2/2)t+\sigma W_t}$ | Log-normal | Price model |
| Ornstein-Uhlenbeck | $dX = \kappa(\theta-X)\,dt + \sigma\,dW$ | (see §2.4) | $\mathcal{N}(\theta, \sigma^2/2\kappa)$ | Spread model |
| CIR | $dX = \kappa(\theta-X)\,dt + \sigma\sqrt{X}\,dW$ | (Bessel process) | Gamma$(2\kappa\theta/\sigma^2, \sigma^2/2\kappa)$ | Volatility, rates |
| SABR | $dF = \sigma F^\beta dW^1$, $d\sigma = \nu\sigma\,dW^2$ | (no closed form) | — | Volatility model |
#### 2.3.3 Numerical Schemes for SDEs
When no closed form exists, discretize with step $\Delta t$:
**Euler-Maruyama** (simplest, strong order 0.5):
$$X_{t+\Delta t} \approx X_t + b(t,X_t)\,\Delta t + \sigma(t,X_t)\,\Delta W_t$$
where $\Delta W_t = \sqrt{\Delta t}\,Z$, $Z\sim\mathcal{N}(0,1)$.
**Milstein** (includes first-order Itō correction, strong order 1.0):
$$X_{t+\Delta t} \approx X_t + b\,\Delta t + \sigma\,\Delta W_t + \tfrac12\sigma\,\sigma_x\bigl[(\Delta W_t)^2 - \Delta t\bigr].$$
The extra term $\tfrac12\sigma\sigma_x[(\Delta W_t)^2 - \Delta t]$ comes from applying Itō's lemma to $\sigma(X_t)dW_t$.
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_em_milstein.svg
:align: center
:alt: Strong convergence comparison — Euler-Maruyama order 1/2 vs Milstein order 1
2026-03-07 09:44:08 +01:00
` ``
2026-03-06 19:14:43 +01:00
### 2.4 Ornstein-Uhlenbeck (Mean-Reversion)
2026-03-06 19:31:04 +01:00
Used in Optimiz-rs's ` sparse_mean_reversion` and ` ou_estimator` modules:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$dX_t = \kappa(\theta - X_t)\,dt + \sigma\,dW_t.$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Intuition — restoring force:** The drift is a spring pulling $X_t$ back to $\theta$:
2026-03-06 19:14:43 +01:00
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_ou_path.svg
:align: center
:alt: Ornstein-Uhlenbeck path — mean-reverting diffusion with stationary confidence bands
2026-03-07 09:44:08 +01:00
` ``
#### 2.4.1 Closed-Form Solution — Step by Step
**Step 1 — Integrating factor.** Rewrite the SDE as:
$$dX_t + \kappa X_t\,dt = \kappa\theta\,dt + \sigma\,dW_t.$$
Multiply both sides by the integrating factor $e^{\kappa t}$ and recognize the left-hand side:
$$d\!\left(e^{\kappa t}X_t\right) = e^{\kappa t}dX_t + \kappa e^{\kappa t}X_t\,dt = e^{\kappa t}\kappa\theta\,dt + e^{\kappa t}\sigma\,dW_t.$$
(Here we used Itō's product rule: $d(e^{\kappa t}X_t) = e^{\kappa t}dX_t + X_t\cdot\kappa e^{\kappa t}dt$ — no quadratic variation cross term since $e^{\kappa t}$ is deterministic.)
**Step 2 — Integrate both sides from $0$ to $t$:**
$$e^{\kappa t}X_t - X_0 = \kappa\theta\int_0^t e^{\kappa s}\,ds + \sigma\int_0^t e^{\kappa s}\,dW_s$$
$$e^{\kappa t}X_t - X_0 = \theta(e^{\kappa t} - 1) + \sigma\int_0^t e^{\kappa s}\,dW_s.$$
**Step 3 — Divide by $e^{\kappa t}$:**
$$\boxed{X_t = \theta + (X_0 - \theta)e^{-\kappa t} + \sigma\int_0^t e^{-\kappa(t-s)}\,dW_s.}$$
**Interpretation of each term:**
| Term | Meaning |
|------|---------|
| $\theta$ | Long-run equilibrium (the "anchor") |
| $(X_0-\theta)e^{-\kappa t}$ | Deterministic decay: initial displacement shrinks at rate $\kappa$ |
| $\sigma\int_0^t e^{-\kappa(t-s)}dW_s$ | Stochastic part: weighted sum of all past noise shocks, with **exponential forgetting** |
The stochastic integral $I_t = \sigma\int_0^t e^{-\kappa(t-s)}dW_s$ is a **Gaussian** random variable
(linear functional of Brownian motion) with:
$$\mathbb{E}[I_t] = 0, \qquad \operatorname{Var}(I_t) = \sigma^2\int_0^t e^{-2\kappa(t-s)}\,ds = \frac{\sigma^2}{2\kappa}(1-e^{-2\kappa t}).$$
**Step 4 — Marginal distribution:**
$$X_t \sim \mathcal{N}\!\left(\theta + (X_0-\theta)e^{-\kappa t},\;\frac{\sigma^2}{2\kappa}(1-e^{-2\kappa t})\right).$$
As $t\to\infty$: $X_t \to \mathcal{N}(\theta, \sigma^2/2\kappa)$ — the stationary distribution.
#### 2.4.2 Transition Density (Conditional on $X_s$)
$$X_t \mid X_s \sim \mathcal{N}\!\left(\theta + (X_s-\theta)e^{-\kappa(t-s)},\;\frac{\sigma^2}{2\kappa}(1-e^{-2\kappa(t-s)})\right), \quad t > s.$$
This is exact (no approximation) because the OU process is **linear**. Key formulas:
$$\hat\mu(\tau) = \theta + (X_s-\theta)e^{-\kappa\tau}, \qquad \hat\sigma^2(\tau) = \frac{\sigma^2}{2\kappa}(1-e^{-2\kappa\tau}), \quad \tau=t-s.$$
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_ou_transition.svg
:align: center
:alt: OU transition density — distribution shifts toward theta and broadens with time
2026-03-07 09:44:08 +01:00
` ``
#### 2.4.3 Half-Life and Mean-Reversion Speed
**Half-life:** $\tau_{1/2} = \ln 2/\kappa$ — time for the initial displacement to halve.
| $\kappa$ (per year) | Half-life | Typical use |
|--------------------|-----------|-------------|
| 0.2 | 3.5 yr | Long-term macro factors |
| 10 | 25 days | Cross-sectional equity spreads |
| 55 | 4.6 days | Short-term pair spreads |
| 252 | 1 trading day | Intraday alpha signals |
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
**MLE log-likelihood** (discrete observations at spacing $\Delta t$):
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
$$\ell(\kappa,\theta,\sigma) = -\frac{1}{2}\sum_{i=1}^{n}\left[\log(2\pi\hat\sigma^2) + \frac{(X_{t_i} - \hat\mu_i)^2}{\hat\sigma^2}\right],$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
where $\hat\mu_i = \theta + (X_{t_{i-1}}-\theta)e^{-\kappa\Delta t}$ and $\hat\sigma^2 = \frac{\sigma^2}{2\kappa}(1-e^{-2\kappa\Delta t})$.
**Score equations** (differentiate $\ell$ and set to zero):
$$\frac{\partial\ell}{\partial\theta} = \sum_i \frac{X_{t_i}-\hat\mu_i}{\hat\sigma^2}(1-e^{-\kappa\Delta t}) = 0,$$
$$\frac{\partial\ell}{\partial\kappa} = \sum_i \frac{(X_{t_i}-\hat\mu_i)}{\hat\sigma^2}(X_{t_{i-1}}-\theta)\Delta t\,e^{-\kappa\Delta t} - \sum_i \frac{\partial\log\hat\sigma^2}{\partial\kappa} = 0.$$
These are nonlinear in $\kappa$; Optimiz-rs solves them with DE (` ou_estimator::fit_mle()`).
::::{admonition} Example — Calibrating OU to an Equity-Pair Spread
:class: note
**Data:** Daily log-spread $X_t = \log(P_A / P_B)$ for a co-integrated pair,
$n=250$ observations, $\Delta t=1/252$ years.
**Step 1 — MLE:** Maximize $\ell(\kappa, \theta, \sigma)$ using ` ou_estimator::fit_mle()`.
**Step 2 — Intermediate verification:** The OU log-likelihood surface:
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_ou_loglik.svg
:align: center
:alt: OU log-likelihood surface — kappa broadly identified, theta tightly localised
2026-03-07 09:44:08 +01:00
` ``
**Typical results:**
| Parameter | Estimate | Interpretation |
|-----------|----------|----------------|
| $\hat\kappa$ | 55/yr | half-life approx 4.6 days |
| $\hat\theta$ | 0.003 | long-run spread approx 0.3% |
| $\hat\sigma$ | 0.12/yr$^{0.5}$ | daily spread vol approx 0.75% |
**Step 3 — Diagnostic:**
Standardized residuals: $r_i = (X_{t_i} - \hat\mu_i)/\hat\sigma$ should be $\mathcal{N}(0,1)$.
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_ou_residuals.svg
:align: center
:alt: OU residual diagnostics — standardised residuals histogram vs N(0,1)
2026-03-07 09:44:08 +01:00
` ``
Ljung-Box test: checks for remaining autocorrelation in $r_i$.
**Step 4 — Trading signal:**
Enter when $|X_t - \hat\theta| > 2\hat\sigma_\infty$ where $\hat\sigma_\infty = \hat\sigma/\sqrt{2\hat\kappa}$.
Exit at $X_t = \hat\theta$. Expected holding time $\approx \hat\tau_{1/2} = \ln 2/\hat\kappa \approx 4.6$ days.
**P&L decomposition:**
- Gross expected profit per trade $\approx 2\hat\sigma_\infty = 2\hat\sigma/\sqrt{2\hat\kappa}$.
- Transaction costs must be $< 2\hat\sigma_\infty$ for profitability.
::::
2026-03-06 19:14:43 +01:00
---
## 3 · Jump Processes
Many financial time series exhibit sudden large moves that Brownian motion cannot capture.
### 3.1 Poisson Process
2026-03-06 19:31:04 +01:00
::::{admonition} Definition — Poisson Process
:class: definition
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
A counting process $N = (N_t)_{t\ge 0}$ is a *Poisson process with
intensity* $\lambda > 0$ if:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
1. $N_0 = 0$.
2. Independent, stationary increments.
3. $\mathbb{P}(N_{t+h}-N_t=1) = \lambda h + o(h)$ and $\mathbb{P}(\Delta N > 1) = o(h)$.
::::
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
Equivalently, $N_t \sim \text{Poisson}(\lambda t)$ and inter-arrival times are
2026-03-07 09:44:08 +01:00
$\text{Exp}(\lambda)$. The *compensated* process $\tilde N_t = N_t - \lambda t$
2026-03-06 19:14:43 +01:00
is a martingale.
2026-03-07 09:44:08 +01:00
**Sample path — step function with random jumps ($\lambda=2$ per unit time):**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_poisson.svg
:align: center
:alt: Poisson process sample path — step function with random jump times
2026-03-07 09:44:08 +01:00
` ``
2026-03-06 19:14:43 +01:00
### 3.2 Compound Poisson Jump-Diffusion (Merton 1976)
2026-03-06 19:31:04 +01:00
$$\frac{dS_t}{S_{t^-}} = \mu\,dt + \sigma\,dW_t + d\Bigl(\sum_{k=1}^{N_t}(e^{J_k}-1)\Bigr),$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
with $N_t$ Poisson($\lambda$) and $J_k \sim \mathcal{N}(\mu_J, \sigma_J^2)$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Sample path — smooth diffusion interrupted by sudden jumps:**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_jump_diffusion.svg
:align: center
:alt: Merton jump-diffusion path — GBM with sudden discontinuous jumps
2026-03-07 09:44:08 +01:00
` ``
**Merton option price** — Poisson mixture of Black-Scholes prices:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$C_{\text{Merton}} = \sum_{n=0}^\infty \frac{e^{-\lambda' T}(\lambda' T)^n}{n!}
\cdot C_{\text{BS}}\!\left(S_0, K, T, r_n, \sigma_n^2\right),$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
where $\lambda' = \lambda e^{\mu_J+\frac12\sigma_J^2}$,
$r_n = r - \lambda(e^{\mu_J+\frac12\sigma_J^2}-1) + n(\mu_J+\tfrac12\sigma_J^2)/T$,
and $\sigma_n^2 = \sigma^2 + n\sigma_J^2/T$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Intuition:** Condition on exactly $n$ jumps occurring (probability $e^{-\lambda' T}(\lambda' T)^n/n!$).
In that scenario the world is a BS world with adjusted drift $r_n$ and total variance
$\sigma^2 T + n\sigma_J^2$. Average over the Poisson distribution of $n$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
::::{admonition} Example — Fitting Merton to a Crash Event
:class: note
**Observed:** S&P 500, March 2020. Implied vol surface shows a vol smile —
OTM puts are expensive (fat left tail), which pure BS cannot explain.
**Merton calibration** (4 parameters: $\sigma, \lambda, \mu_J, \sigma_J$):
| Parameter | Estimated value | Interpretation |
|-----------|----------------|----------------|
| $\sigma$ | 0.18/yr | baseline diffusion vol |
| $\lambda$ | 3/yr | approx 3 crash events per year |
| $\mu_J$ | -0.12 | average log-jump = -12% |
| $\sigma_J$ | 0.08 | jump size std = 8% |
**Fitting procedure:**
1. Collect implied vols for strikes $K$ and maturities $T$.
2. Minimise $\sum_{K,T}(C_{\text{Merton}}(K,T;\theta) - C_{\text{market}})^2$
via ` differential_evolution` (DE is ideal — 4 params, non-convex landscape).
3. **Diagnostic:** Plot Merton vs market smile; expect fit within 0.5 vega.
**Result:** Negative $\mu_J$ captures left-tail skew, explaining costly OTM puts.
::::
### 3.3 Levy Processes and the Levy-Khintchine Representation
::::{admonition} Theorem — Levy-Khintchine
2026-03-06 19:31:04 +01:00
:class: tip
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
Every Levy process (independent stationary increments) has characteristic function
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\mathbb{E}[e^{i\xi X_t}] = \exp\!\Bigl(t\Bigl[i b\xi - \tfrac{1}{2}\sigma^2\xi^2
+ \int_{\mathbb{R}\setminus\{0\}} \bigl(e^{i\xi z}-1-i\xi z\mathbf{1}_{|z|\le1}\bigr)\nu(dz)\Bigr]\Bigr)$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
where $(b, \sigma^2, \nu)$ is the *Levy triplet* and $\nu$ the *Levy measure*,
2026-03-06 19:31:04 +01:00
satisfying $\int(1\wedge z^2)\nu(dz)<\infty$.
::::
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Levy measure tail shapes:**
2026-03-06 19:14:43 +01:00
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_levy_tails.svg
:align: center
:alt: Lévy measure tail comparison — power-law vs Gaussian tails on log scale
2026-03-07 09:44:08 +01:00
` ``
**Levy Process Zoo**
| Process | Levy measure $\nu$ | Use case |
2026-03-06 19:31:04 +01:00
|---------|-------------------|----------|
| Brownian motion | $\nu=0$ | continuous diffusion |
| Compound Poisson | finite measure | rare large jumps |
2026-03-07 09:44:08 +01:00
| Variance Gamma | $\nu(dz)\propto e^{-c|z|}/|z|$ | equity returns |
| CGMY | power-law with exponential cutoff | heavy tails, $Y\in(0,2)$ |
| $\alpha$-stable | $c|z|^{-1-\alpha}$ | infinite-variance regimes |
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
### 3.4 SDEs with Jumps — Generator and Ito Formula
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$dX_t = b(X_{t^-})\,dt + \sigma(X_{t^-})\,dW_t
+ \int_{\mathbb{R}} c(X_{t^-}, z)\,\tilde N(dt, dz),$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
where $\tilde N(dt,dz) = N(dt,dz) - \nu(dz)\,dt$ is the *compensated jump measure*.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Ito formula for jump-diffusions:**
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$dF(X_t) = \mathcal{L}F\,dt + \partial_x F\,\sigma\,dW_t
+ \int\bigl[F(X_{t^-}+c)-F(X_{t^-})\bigr]\tilde N(dt,dz),$$
2026-03-06 19:14:43 +01:00
where the *generator* is
2026-03-06 19:31:04 +01:00
$$\mathcal{L}F = b\,\partial_x F + \tfrac12\sigma^2\partial_{xx}F
+ \int\bigl[F(x+c)-F(x)-c\,\partial_x F\bigr]\nu(dz).$$
2026-03-06 19:14:43 +01:00
---
## 4 · Optimal Control (HJB, PMP, Jumps)
2026-03-06 20:22:35 +01:00
**Big picture.** Optimal control asks: *given a stochastic system we can steer with a
control $u_t$, what policy minimises expected cost?* Three complementary tools answer this:
| Tool | Solves | Scales to | Intuition |
|------|--------|-----------|-----------|
| HJB PDE | Value function $V(t,x)$ | Low dim (PDE grid) | Dynamic programming |
| PMP | Optimal paths $(X_t,p_t)$ | High dim (ODE) | Adjoint sensitivity |
| HJBI | Same as HJB + jumps | Low dim | Non-local integral term |
---
2026-03-06 19:14:43 +01:00
### 4.1 Stochastic HJB
2026-03-06 20:22:35 +01:00
**Setup.** The state $X_t \in \mathbb{R}^d$ evolves as
$$dX_t = b(X_t,u_t)\,dt + \sigma(X_t,u_t)\,dW_t,$$
and we minimise the total expected cost
$$J(t,x;u) = \mathbb{E}\!\left[\int_t^T \ell(X_s,u_s)\,ds + g(X_T)\,\Big|\,X_t=x\right].$$
The **value function** $V(t,x) = \inf_u J(t,x;u)$ satisfies:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$-\partial_t V = \inf_{u\in\mathcal{U}}\Bigl[\ell(x,u) + \nabla_x V^{\!\top} b(x,u)
+ \tfrac12\operatorname{Tr}\bigl(\sigma\sigma^{\!\top}(x,u)\,\nabla_x^2 V\bigr)\Bigr],
\quad V(T,\cdot)=g.$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Intuition — three terms inside the infimum:**
- $\ell(x,u)$ — instantaneous running cost (pay now).
- $\nabla_x V^\top b$ — drift of the value function (first-order Taylor in state change).
2026-03-06 20:22:35 +01:00
- $\tfrac12\operatorname{Tr}(\sigma\sigma^\top\nabla^2 V)$ — curvature correction due to noise
2026-03-07 09:44:08 +01:00
(stochastic analogue of the second-order Taylor term).
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
Under smooth $V$, the **feedback law** is
$u^\star(t,x) = \arg\min_u[\ell(x,u)+\nabla_x V^\top b(x,u)].$
---
2026-03-07 09:44:08 +01:00
::::{admonition} Example — Optimal Portfolio Allocation (Merton 1969)
2026-03-06 20:22:35 +01:00
:class: note
Investor wealth $X_t$ follows
$dX_t = (r + u_t(\mu-r))X_t\,dt + u_t\sigma X_t\,dW_t$,
where $u_t\in\mathbb{R}$ is the fraction invested in the risky asset.
Minimise $-\mathbb{E}[\log X_T]$ (maximise expected log-utility).
**Ansatz:** $V(t,x) = \ln x + f(t)$. Substituting into HJB:
$$f'(t) = -r - \frac{(\mu-r)^2}{2\sigma^2},\qquad f(T)=0.$$
The **optimal Merton rule** is constant:
$$u^\star = \frac{\mu-r}{\sigma^2} \quad (\text{fraction in risky asset}).$$
2026-03-07 09:44:08 +01:00
Invest a fixed fraction proportional to the Sharpe ratio, inversely to variance —
independent of wealth and time.
2026-03-06 20:22:35 +01:00
::::
---
**LQR special case** ($\ell = x^\top Q x + u^\top R u$, $b=Ax+Bu$,
$\sigma$ constant):
2026-03-06 19:31:04 +01:00
$V(t,x)=x^\top P(t)x + v(t)$ with $P$ solving the *matrix Riccati ODE*:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$-\dot P = A^\top P + PA - PBR^{-1}B^\top P + Q,\quad P(T)=Q_T.$$
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
The optimal control is **linear feedback**: $u^\star_t = -R^{-1}B^\top P(t)X_t$.
---
2026-03-07 09:44:08 +01:00
::::{admonition} Example — Optimal Inventory (Almgren-Chriss liquidation)
2026-03-06 20:22:35 +01:00
:class: note
2026-03-07 09:44:08 +01:00
Liquidate $X_0$ shares by time $T$. Inventory $X_t$, trading rate $u_t<0$:
2026-03-06 20:22:35 +01:00
$$dX_t = u_t\,dt, \quad
\ell(x,u) = \underbrace{\alpha x^2}_{\text{risk}} + \underbrace{\beta u^2}_{\text{impact}}.$$
2026-03-07 09:44:08 +01:00
This is a **deterministic LQR** with
2026-03-06 20:22:35 +01:00
$A=0$, $B=1$, $Q=\alpha$, $R=\beta$.
The Riccati solution gives the TWAP-like schedule
$$u^\star(t,x) = -\frac{\alpha}{\beta}\cdot\frac{\sinh(\kappa(T-t))}{\sinh(\kappa T)}\cdot X_0,
\quad \kappa=\sqrt{\alpha/\beta}.$$
2026-03-07 09:44:08 +01:00
Large $\kappa$ (high risk aversion or low impact cost) -> aggressive front-loaded selling.
2026-03-06 20:22:35 +01:00
::::
---
2026-03-06 19:14:43 +01:00
### 4.2 Pontryagin Maximum Principle
2026-03-07 09:44:08 +01:00
The PMP avoids the curse of dimensionality — it converts HJB into a
**two-point boundary-value ODE** in $(X_t, p_t)$, feasible when a PDE grid is intractable.
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
::::{admonition} Theorem (PMP)
:class: tip
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
Define the **Hamiltonian** $\mathcal{H}(x,u,p) = \ell(x,u)+p^\top b(x,u)$.
2026-03-07 09:44:08 +01:00
If $(X^\star, u^\star)$ is optimal, there exists a **costate** process $p_t$ with:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\dot p_t = -\nabla_x \mathcal{H}(X_t^\star, u_t^\star, p_t),\quad p_T = \nabla_x g(X_T^\star),$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
and the optimality condition $u_t^\star = \arg\min_u \mathcal{H}(X_t^\star, u, p_t)$ holds a.e.
::::
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
**Costate intuition.** $p_t$ is the *shadow price* of state $X_t$:
$$p_t = \nabla_x V(t, X_t^\star) = \frac{\partial (\text{optimal cost-to-go})}{\partial x}.$$
2026-03-07 09:44:08 +01:00
This is exactly the adjoint / backpropagation equation of deep learning — PMP is the
2026-03-06 20:22:35 +01:00
continuous-time version of gradient backpropagation through a dynamical system.
**Algorithm (shooting method):**
` ``
1. Guess costate p_0
2. Integrate forward: dX = b(X, u*(X,p)) dt (state ODE)
2026-03-07 09:44:08 +01:00
3. Integrate backward: dp = -grad_x H(X, u*, p) dt (costate ODE)
4. Check boundary condition: p_T = grad g(X_T)
2026-03-06 20:22:35 +01:00
5. If not satisfied -> update p_0 (Newton / gradient) -> go to 2
` ``
---
::::{admonition} Example — PMP for the Merton Problem
:class: note
2026-03-07 09:44:08 +01:00
With $\ell = 0$, $g(x) = -\ln x$, $b = (r+u(\mu-r))x$,
2026-03-06 20:22:35 +01:00
the Hamiltonian is $\mathcal{H}(x,u,p) = p(r+u(\mu-r))x$.
**Costate ODE:**
$\dot p_t = -\partial_x \mathcal{H} = -p_t(r+u^\star(\mu-r))$,
with terminal $p_T = -1/X_T^\star$.
2026-03-07 09:44:08 +01:00
**Optimality condition** $\partial_u\mathcal{H}=0$ recovers $u^\star = (\mu-r)/\sigma^2$.
2026-03-06 20:22:35 +01:00
The costate path $p_t = -e^{-(T-t)(r+(\mu-r)u^\star)}/X_t^\star$ confirms that the
2026-03-07 09:44:08 +01:00
shadow price scales inversely with wealth — poorer investors value state more.
2026-03-06 20:22:35 +01:00
::::
---
2026-03-06 19:31:04 +01:00
The costate pair $(X_t^\star, p_t)$ moves along Hamiltonian geodesics on
$T^\star\mathbb{R}^d$ — a direct link to symplectic geometry (§10.4).
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
---
2026-03-06 19:14:43 +01:00
### 4.3 HJB with Jumps (HJBI)
2026-03-06 20:22:35 +01:00
When the state can jump (§3.4), the HJB equation gains a **non-local integral operator**:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$-\partial_t V = \inf_{u}\Bigl[\ell + \nabla V^\top b + \tfrac12\operatorname{Tr}(\sigma\sigma^\top\nabla^2 V)
2026-03-06 20:22:35 +01:00
+ \underbrace{\int\bigl[V(x+c(x,u,z))-V(x)-\nabla V^\top c(x,u,z)\bigr]\nu(dz)}_{\text{expected value change from jumps}}\Bigr].$$
**Intuition for the integral term.** A jump of size $c$ moves the state from $x$ to
$x+c$, changing the value function by $V(x+c)-V(x)$. The compensator $\nabla V^\top c$
2026-03-07 09:44:08 +01:00
subtracts the linear part already counted in the drift.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
The ` optimal_control` module discretises the integral on truncated support using Gaussian quadrature.
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
---
::::{admonition} Example — Optimal Execution with Jump Risk
:class: note
Extend the inventory model with Poisson order-flow shocks:
$$dX_t = u_t\,dt + \Delta J_t,\quad \Delta J_t \sim \text{Compound Poisson}(\lambda, \mathcal{N}(0,\sigma_J^2)).$$
2026-03-07 09:44:08 +01:00
With Gaussian jumps, the HJBI reduces to the same LQR Riccati ODE but with
**effective diffusion** $\sigma_{\text{eff}}^2 = \lambda\sigma_J^2$.
2026-03-06 20:22:35 +01:00
Key insight: order-flow risk acts like additional Brownian volatility, accelerating
the optimal sell schedule.
::::
---
2026-03-06 19:14:43 +01:00
### 4.4 Viscosity Solutions
2026-03-07 09:44:08 +01:00
When $V$ fails to be $C^{1,2}$ — degenerate diffusion, constraints, or non-smooth terminal
conditions — classical solutions may not exist. **Viscosity solutions** (Crandall-Lions 1983)
provide a rigorous weak notion that restores existence and uniqueness.
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
::::{admonition} Definition — Viscosity Subsolution
:class: definition
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
A continuous $V$ is a viscosity *subsolution* if for every smooth $\phi$
2026-03-07 09:44:08 +01:00
touching $V$ **from above** at $(t_0,x_0)$:
2026-03-06 20:22:35 +01:00
$$-\partial_t\phi(t_0,x_0) \le \inf_u\Bigl[\ell(x_0,u) + \nabla_x\phi^\top b + \tfrac12\operatorname{Tr}(\sigma\sigma^\top\nabla^2\phi)\Bigr].$$
2026-03-07 09:44:08 +01:00
A *supersolution* reverses the inequality. The unique viscosity **solution** is both.
2026-03-06 19:31:04 +01:00
::::
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Practical interpretation:** Classical: "$V$ satisfies the PDE pointwise."
Viscosity: "$V$ satisfies the PDE in an averaged sense — even at kinks."
2026-03-06 20:22:35 +01:00
2026-03-07 09:44:08 +01:00
Optimiz-rs's backward DP converges to the viscosity solution under CFL:
2026-03-06 19:31:04 +01:00
$\Delta t \le C\,(\Delta x)^2$.
2026-03-06 19:14:43 +01:00
2026-03-06 20:22:35 +01:00
---
::::{admonition} Example — American Option as a Viscosity Problem
:class: note
2026-03-07 09:44:08 +01:00
American put payoff $g(x) = (K-x)^+$ gives the **variational inequality**:
2026-03-06 20:22:35 +01:00
2026-03-07 09:44:08 +01:00
$$\min\Bigl(-\partial_t V - \mathcal{L}_{\text{BS}}V,\; V - (K-x)^+\Bigr) = 0.$$
2026-03-06 20:22:35 +01:00
2026-03-07 09:44:08 +01:00
- **Continuation region** ($V > g$): Black-Scholes PDE holds.
- **Exercise region** ($V = g$): option exercised immediately.
2026-03-06 20:22:35 +01:00
2026-03-07 09:44:08 +01:00
At the free boundary: $\partial_x V$ is continuous (*smooth-pasting*) but $\partial_{xx}V$ is not
— $V$ is $C^1$ but not $C^2$. Viscosity theory handles this kink rigorously.
2026-03-06 20:22:35 +01:00
::::
2026-03-06 19:31:04 +01:00
**Backward DP grid schema:**
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
` ``
t=T [ g(x_1) g(x_2) ... g(x_n) ] terminal condition
t=T-1 [ V^1 V^2 ... V^n ] one backward step
.
.
t=0 [ V_0^1 V_0^2 ... V_0^n ] -> optimal policy u*(x,0)
` ``
2026-03-06 19:14:43 +01:00
---
## 5 · Mean Field Games (1D Solver)
2026-03-07 09:44:08 +01:00
MFG couples a **backward HJB** (individual value) with a **forward Fokker-Planck** (population density):
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\begin{aligned}
\text{HJB (backward): } &
-\partial_t u - \nu\partial_{xx}u + H(x,\partial_x u, m) = 0, & u(T,x)&=g(x),\\
2026-03-07 09:44:08 +01:00
\text{Fokker-Planck (forward): } &
2026-03-06 19:31:04 +01:00
\partial_t m - \nu\partial_{xx}m - \partial_x(m\,\partial_p H) = 0, & m(0,x)&=m_0(x).
\end{aligned}$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
**Coupling:** $H$ depends on $m$ (mean-field interaction), creating a fixed-point problem.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Backward-forward information flow:**
` ``
t = 0 t = T
m_0 (known) g(x) (known)
| |
| Fokker-Planck (forward -->) |
| evolves population density m |
| |
v v
m(t,x) <----- mutually consistent --- u(t,x)
HJB (backward <--)
optimal value function
Each agent uses u to choose optimal control.
Population density m feeds back into u via H(x, du, m).
Fixed point: m and u are simultaneously consistent (Nash equilibrium).
` ``
2026-03-06 19:31:04 +01:00
**Fixed-point algorithm:**
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
` ``
1. Initialise m^0 = m_0 (e.g. Gaussian)
2. Solve HJB backward -> u^{k+1}
3. Extract optimal drift: alpha*(x,t) = -d_p H(x, d_x u^{k+1}, m^k)
4. Solve Fokker-Planck forward with alpha* -> m^{k+1}
5. Check ||m^{k+1} - m^k||_1 < eps; if not, k++ -> go to 2
` ``
2026-03-06 19:14:43 +01:00
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_kalman_covariance.svg
:align: center
:alt: Kalman filter covariance convergence — P_t converges to steady state
2026-03-07 09:44:08 +01:00
` ``
Before observation (predict): After observation (update):
+------------------+ +--------+
| | | |
| p(x | y_1:t-1) | ----> |p(x|y_t)|
| wide ellipse | | tight |
+------------------+ +--------+
Kalman gain K interpolates between:
K -> 0 (huge R, ignore y_t) => x_hat = prior
K -> H^-1 (R=0, trust y_t) => x_hat = H^-1 y_t
**Covariance convergence:** $P_t \to P_\infty$ (algebraic Riccati solution) exponentially fast
when $(F,H)$ is observable.
2026-03-06 19:14:43 +01:00
### 6.2 Information-Theoretic View
The Kalman filter computes the exact conditional mean
2026-03-06 19:31:04 +01:00
$\hat{\mathbf{x}}_t = \mathbb{E}[\mathbf{x}_t \mid \mathbf{y}_{1:t}]$ in Gaussian models
and minimises $D_{\mathrm{KL}}(p(\mathbf{x}_t|\mathbf{y}_{1:t})\,\|\,\mathcal{N}(\hat{\mathbf{x}}_t, P_t))$
2026-03-06 19:14:43 +01:00
over all Gaussian approximations.
2026-03-07 09:44:08 +01:00
### 6.3 Continuous-Time Limit (Kalman-Bucy)
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
For $d\mathbf{X}_t = A\mathbf{X}_t\,dt + B\,d\mathbf{W}_t$,
$d\mathbf{Y}_t = C\mathbf{X}_t\,dt + d\mathbf{V}_t$, the error covariance satisfies
2026-03-06 19:14:43 +01:00
the *Riccati ODE*:
2026-03-07 09:44:08 +01:00
$$\dot P = AP + PA^\top + BQB^\top - PC^\top R^{-1}CP,\qquad P(0)=P_0.$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
::::{admonition} Example — Tracking a Noisy AR(1) Signal
:class: note
**Model:** Latent trend $x_t = 0.95 x_{t-1} + w_t$ ($Q=0.01$);
noisy observation $y_t = x_t + v_t$ ($R=1.0$).
Steady-state: $P_\infty \approx 0.17$, so $K_\infty \approx 0.15$.
Kalman weights the new observation at 15%, prior at 85%.
**Implication:** With $R/Q = 100$ (much noisier obs than process), the filter heavily
smooths observations — useful for noisy financial signals like tick prices.
::::
2026-03-06 19:14:43 +01:00
---
2026-03-07 09:44:08 +01:00
## 7 · MCMC (Metropolis-Hastings and Langevin)
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
### 7.1 Metropolis-Hastings
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
For target $\pi(x) \propto e^{-U(x)}$ and proposal $q(x'\mid x)$:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\alpha(x\to x') = \min\!\Bigl(1, \frac{\pi(x')q(x\mid x')}{\pi(x)q(x'\mid x)}\Bigr).$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
**Detailed balance** $\pi(x)\alpha(x\to x') = \pi(x')\alpha(x'\to x)$
ensures $\pi$ is the unique stationary distribution.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Optimal scaling:** With Gaussian proposal, step $h^\star \approx 2.38/\sqrt{d}$
(Roberts-Gelman-Gilks 1997) targets ~23-45% acceptance.
**Energy landscape and accept/reject:**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_mcmc_energy.svg
:align: center
:alt: MCMC energy landscape — bimodal potential function
2026-03-07 09:44:08 +01:00
` ``
**Trace plot of a well-mixed chain:**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_mcmc_trace.svg
:align: center
:alt: MCMC trace plot — chain samples and marginal distribution
2026-03-07 09:44:08 +01:00
` ``
2026-03-06 19:14:43 +01:00
### 7.2 Langevin Dynamics (MALA)
Metropolis-Adjusted Langevin proposal:
2026-03-06 19:31:04 +01:00
$$x' = x - \tfrac{h^2}{2}\nabla U(x) + h\,\xi, \quad \xi\sim\mathcal{N}(0,I_d),$$
2026-03-06 19:14:43 +01:00
a discretisation of the *overdamped Langevin SDE*:
2026-03-06 19:31:04 +01:00
$$dX_t = -\nabla U(X_t)\,dt + \sqrt{2}\,dW_t,$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
whose stationary distribution is exactly $\pi \propto e^{-U}$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
MALA converges in $O(d^{1/3})$ steps vs $O(d)$ for RW-MH — key advantage
2026-03-06 19:14:43 +01:00
for high-dimensional posteriors.
2026-03-07 09:44:08 +01:00
**MALA vs RW-MH trajectory comparison:**
` ``
2026-03-07 10:38:38 +01:00
RW-MH vs MALA trajectories
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2026-03-07 09:44:08 +01:00
RW-MH (random walk): MALA (gradient-guided):
2026-03-07 10:38:38 +01:00
◦ ◦ ◦ ▲ −∇U ← toward mode
◦ ◦ ◦ ◦ vs ╱
◦ ◦ ◦ ╱ ◦ ◦
◦ ◦ ◦ ◦ ◦
diffusive, O(d) steps directed, O(d^{1/3}) steps
each step ∼ isotropic ξ each step biased by −∇U(x)
2026-03-07 09:44:08 +01:00
` ``
::::{admonition} Example — Calibrating OU Parameters via MCMC
:class: note
**Goal:** Full Bayesian inference on $(\kappa, \theta, \sigma)$ of an OU process.
**Prior:** $\kappa \sim \text{Gamma}(2,0.1)$, $\theta \sim \mathcal{N}(0,1)$,
$\sigma \sim \text{HalfNormal}(0.5)$.
**MALA chain** ($d=3$, step $h=0.02$):
` ``
Iteration kappa theta sigma log-post
--------- ----- ----- ----- --------
1000 42.1 0.003 0.11 125.3
2000 55.3 0.003 0.12 128.7 <- burn-in complete
3000 58.1 0.003 0.12 129.2
50000 54.8 0.003 0.12 128.9 <- stable posterior
` ``
**Marginal posterior** (kappa): 95% CI $[44, 67]$, peak at 55/yr —
wider than the MLE point estimate, reflecting genuine parameter uncertainty.
::::
2026-03-06 19:14:43 +01:00
---
## 8 · Hidden Markov Models (HMM)
### 8.1 Model
2026-03-06 19:31:04 +01:00
Latent Markov chain $Z_t \in \{1,\ldots,K\}$ with transition matrix
$A_{ij}=\mathbb{P}(Z_t=j\mid Z_{t-1}=i)$ generates observations
$Y_t \mid Z_t=k \sim B_k(y)$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**State machine diagram ($K=3$ regimes):**
2026-03-06 19:14:43 +01:00
2026-03-07 13:39:43 +01:00
` ``{figure} ../_static/diagrams/fig_hmm_regime.svg
:align: center
:width: 90%
2026-03-07 09:44:08 +01:00
2026-03-07 13:39:43 +01:00
HMM $K=3$ state machine with Bull / Neutral / Bear regimes and Gaussian emission
parameters. Self-transitions $A_{11}=A_{22}=0.97$, $A_{33}=0.90$.
2026-03-07 09:44:08 +01:00
` ``
### 8.2 Baum-Welch (EM)
**E-step (forward-backward):**
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\alpha_t(k) = B_k(y_t)\sum_j \alpha_{t-1}(j)A_{jk}, \qquad
\beta_t(k) = \sum_j A_{kj}B_j(y_{t+1})\beta_{t+1}(j).$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\gamma_t(k) = \frac{\alpha_t(k)\beta_t(k)}{\sum_j \alpha_t(j)\beta_t(j)}, \qquad
\xi_t(j,k) = \frac{\alpha_t(j)A_{jk}B_k(y_{t+1})\beta_{t+1}(k)}{\mathcal{L}}.$$
2026-03-06 19:14:43 +01:00
**M-step:**
2026-03-06 19:31:04 +01:00
$$\hat A_{jk} = \frac{\sum_t \xi_t(j,k)}{\sum_t\gamma_t(j)}, \qquad
\hat\mu_k = \frac{\sum_t \gamma_t(k)\,y_t}{\sum_t \gamma_t(k)}.$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Information-theoretic view:** Baum-Welch is EM on the complete-data log-likelihood; each
2026-03-06 19:31:04 +01:00
iteration monotonically increases $\mathcal{L}(\theta)$ by Jensen's inequality.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Viterbi trellis diagram ($K=3$, $T=4$):**
2026-03-06 19:14:43 +01:00
2026-03-07 13:39:43 +01:00
` ``{figure} ../_static/diagrams/fig_viterbi_trellis.svg
:align: center
:width: 82%
2026-03-07 09:44:08 +01:00
2026-03-07 13:39:43 +01:00
Viterbi trellis ($K=3$, $T=4$). Filled nodes mark the MAP (most probable) state
sequence; arrows show transition candidates. Backtracking via $\psi_t(k)$ recovers
$z_1^\star o z_4^\star$.
2026-03-07 09:44:08 +01:00
` ``
**Viterbi (MAP path):** $\delta_t(k) = \max_j \delta_{t-1}(j)A_{jk} \cdot B_k(y_t)$, $O(TK^2)$.
**Quality check:** Log-likelihood must be non-decreasing; confusion matrix of Viterbi labels
vs ground truth validates regime recovery.
::::{admonition} Example — Equity Regime Detection (S&P 500)
:class: note
**Data:** S&P 500 daily log-returns, 2000-2023, $T=5820$ observations.
**Fit $K=3$ HMM** using ` hmm::fit_baum_welch()` with 20 random restarts.
**Estimated regime parameters:**
| Regime | Ann. return | Ann. vol | Avg duration |
|--------|------------|---------|-------------|
| Bull | +18% | 10% | 350 days |
| Neutral | +2% | 17% | 80 days |
| Bear | -40% | 38% | 25 days |
**Smoothed state probabilities** $\gamma_t(k)$:
` ``
P(Bull) 1.0|XXXXXXXXXX XXXXXXXXXX XXXXX
| XXXXXXXX XXXXXXXX
0.0 +-------------------------> t (years)
2000 2003 2008 2020 2023
^ ^ ^
dot-com bust GFC COVID crash
` ``
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_kl_asymmetry.svg
:align: center
:alt: KL divergence asymmetry — D(P||Q) vs D(Q||P) illustration
2026-03-07 09:44:08 +01:00
` ``
2026-03-06 19:31:04 +01:00
**Connection to model selection:** AIC $= 2k - 2\ln\hat{\mathcal{L}}$ and
BIC $= k\ln n - 2\ln\hat{\mathcal{L}}$ bound $D_{\mathrm{KL}}(p_{\text{true}}\,\|\,p_\theta)$.
2026-03-06 19:14:43 +01:00
### 9.2 Fisher Information
2026-03-06 19:31:04 +01:00
::::{admonition} Definition — Fisher Information Matrix
:class: definition
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
For parametric model $p(x;\theta)$:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\mathcal{I}(\theta)_{ij}
= \mathbb{E}_{x\sim p}\!\left[\partial_{\theta_i}\log p\;\partial_{\theta_j}\log p\right]
= -\mathbb{E}\!\left[\partial^2_{\theta_i\theta_j}\log p\right].$$
::::
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Fisher information as curvature of the log-likelihood:**
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_fisher_curvature.svg
:align: center
:alt: Fisher information curvature — log-likelihood and information matrix
2026-03-07 09:44:08 +01:00
` ``
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_natural_gradient.svg
:align: center
:alt: Natural gradient descent — steepest descent in information geometry
2026-03-07 09:44:08 +01:00
` ``
2026-03-07 11:29:04 +01:00
` ``{figure} ../_static/diagrams/fig_curvatures.svg
:align: center
:alt: Curvature comparison — positive, zero, and negative curvature geodesics
2026-03-07 09:44:08 +01:00
` ``
**Tangent space — linear approximation at $p$:**
` ``
M (curved 2D surface): TpM (flat tangent plane at p):
.~~~~. ___________
/ \ --> | TpM |
| p * | | * p |
| | |___________|
\ /
.~~~~.
(not flat globally, but TpM is flat locally — used for calculus on M)
` ``
**Geodesics** satisfy:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\ddot\gamma^k + \sum_{i,j}\Gamma^k_{ij}\,\dot\gamma^i\dot\gamma^j = 0,$$
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
where $\Gamma^k_{ij} = \tfrac12 g^{kl}(\partial_i g_{jl}+\partial_j g_{il}-\partial_l g_{ij})$
2026-03-06 19:14:43 +01:00
are the *Christoffel symbols* encoding intrinsic curvature.
2026-03-07 09:44:08 +01:00
### 10.2 Information Geometry and Fisher-Rao Metric
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
The statistical manifold $\mathcal{M} = \{p(\cdot;\theta)\}$ carries the
2026-03-07 09:44:08 +01:00
**Fisher-Rao metric** $g_{ij}(\theta) = \mathcal{I}(\theta)_{ij}$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Standard vs natural gradient:**
2026-03-07 13:39:43 +01:00
` ``{figure} ../_static/diagrams/fig_std_vs_nat_gradient.svg
:align: center
:width: 88%
2026-03-07 09:44:08 +01:00
2026-03-07 13:39:43 +01:00
Standard versus natural gradient: geometric properties. On exponential families
the natural gradient equals the MLE Newton step, achieving convergence in one
iteration.
2026-03-07 09:44:08 +01:00
` ``
**Natural gradient (Amari 1998):**
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\theta \leftarrow \theta - \eta\,\mathcal{I}(\theta)^{-1}\nabla_\theta\mathcal{L}.$$
2026-03-06 19:14:43 +01:00
**KL geometry:**
2026-03-06 19:31:04 +01:00
$D_{\mathrm{KL}}(p_\theta\,\|\,p_{\theta+d\theta}) = \tfrac12\,d\theta^\top\mathcal{I}(\theta)\,d\theta + O(\|d\theta\|^3)$,
2026-03-07 09:44:08 +01:00
confirming Fisher-Rao as the intrinsic KL metric.
2026-03-06 19:14:43 +01:00
**Dually flat structure:** Exponential families
2026-03-06 19:31:04 +01:00
$p(x;\theta)=h(x)\exp(\theta^\top T(x)-A(\theta))$
2026-03-07 09:44:08 +01:00
have $K=0$ — explaining exact Newton/natural-gradient convergence.
::::{admonition} Example — Natural Gradient on a Gaussian Model
:class: note
For $p(x;\theta) = \mathcal{N}(\mu, \sigma^2)$, $\theta=(\mu,\sigma^2)$:
$$\mathcal{I}(\theta) = \begin{pmatrix} 1/\sigma^2 & 0 \\ 0 & 1/(2\sigma^4) \end{pmatrix}.$$
**Natural gradient** of $\mathcal{L} = -\log p(x_{\rm obs};\theta)$:
$$\tilde\nabla_\theta\mathcal{L} = \mathcal{I}^{-1}\nabla\mathcal{L} = \begin{pmatrix}\mu-x \\ \sigma^2 - (x-\mu)^2/2\end{pmatrix}.$$
One Newton step on this exponential family finds the MLE exactly because the
Hessian equals $\mathcal{I}$ (dually flat, $K=0$).
::::
2026-03-06 19:14:43 +01:00
### 10.3 Lie Groups and Geometric Control
2026-03-06 19:31:04 +01:00
::::{admonition} Definition — Lie Group
:class: definition
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
A *Lie group* $G$ is a smooth manifold with a group structure where
multiplication and inversion are smooth. The *Lie algebra* $\mathfrak{g} = T_e G$
linearises the group at the identity.
::::
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Matrix Lie group hierarchy:**
2026-03-06 19:14:43 +01:00
2026-03-07 13:39:43 +01:00
` ``{figure} ../_static/diagrams/fig_lie_group_hierarchy.svg
:align: center
:width: 90%
2026-03-07 09:44:08 +01:00
2026-03-07 13:39:43 +01:00
Matrix Lie group hierarchy: subgroup inclusions and their quantitative-finance
applications. $SO(n)$ underpins PCA factor rotation; $\mathrm{Sp}(2n,\mathbb{R})$
governs Hamiltonian mechanics (PMP §10.4); $H(n)$ drives path-signature features.
2026-03-07 09:44:08 +01:00
` ``
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
**Left-invariant control system on $G$:**
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
$$\dot g(t) = g(t)\,\xi(t), \quad g\in G,\; \xi(t)\in\mathfrak{g}.$$
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
PMP on Lie groups yields the *Lie-Poisson (Euler-Poincare) equations* (Holm-Marsden-Ratiu),
2026-03-06 19:14:43 +01:00
providing structure-preserving optimal trajectories.
### 10.4 Symplectic Geometry and Hamiltonian Structure
2026-03-06 19:31:04 +01:00
The phase space $(T^\star M, \omega)$ carries the symplectic 2-form
$\omega = \sum_i dp_i \wedge dq_i$. Hamilton's equations preserve $\omega$
2026-03-06 19:14:43 +01:00
(*Liouville's theorem* — phase-space volume conserved).
2026-03-06 19:31:04 +01:00
**Connection to PMP:** The costate pair $(X_t^\star, p_t)$ solves Hamilton's equations,
i.e., the PMP is a symplectic flow on $T^\star\mathbb{R}^d$.
2026-03-06 19:14:43 +01:00
2026-03-07 09:44:08 +01:00
**Symplectic integrators** (Stormer-Verlet, Ruth-Forest) preserve $\omega$ discretely,
2026-03-06 19:14:43 +01:00
keeping the Hamiltonian nearly constant over long horizons — critical for multi-year
allocation back-tests in Optimiz-rs.
### 10.5 Sectional Curvature and Landscape Geometry
2026-03-06 19:31:04 +01:00
The sectional curvature $K(\sigma)$ governs how quickly nearby geodesics diverge:
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
` ``
2026-03-07 10:38:38 +01:00
Sectional curvature and optimiser geometry
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
K > 0 (sphere) → geodesics converge → compact optimiser orbits
K = 0 (flat) → Euclidean behaviour → Newton / nat. grad. exact
K < 0 (hyper.) → exponential spread → fast landscape exploration
Exponential families live on K = 0 manifold (dually flat).
DE explores K < 0 terrain: difference vectors "fan out" exponentially.
2026-03-06 19:31:04 +01:00
` ``
2026-03-06 19:14:43 +01:00
2026-03-06 19:31:04 +01:00
For exponential families in natural/mean parameters $K=0$ — explaining exact
2026-03-06 19:14:43 +01:00
Newton convergence without curvature correction.
---
## Quick Reference
2026-03-06 19:31:04 +01:00
| Concept | Key equation / object | Optimiz-rs module |
|---------|----------------------|-------------------|
| Brownian motion | $W_t - W_s \sim \mathcal{N}(0,t-s)$ | ` point_processes` |
2026-03-07 09:44:08 +01:00
| Ito SDE | $dX=b\,dt+\sigma\,dW$ | ` ou_estimator` |
2026-03-06 19:31:04 +01:00
| Poisson / Compound Poisson | $N_t\sim\text{Poisson}(\lambda t)$ | ` point_processes` |
2026-03-07 09:44:08 +01:00
| Levy process | triplet $(b,\sigma^2,\nu)$ | ` point_processes` |
2026-03-06 19:31:04 +01:00
| HJB PDE | $-\partial_t V = \inf_u[\ell + \nabla V^\top b + \tfrac12\operatorname{Tr}\sigma\sigma^\top\nabla^2 V]$ | ` optimal_control` |
| HJBI (jumps) | $+\int[V(\cdot+c)-V-\nabla V^\top c]\nu\,dz$ | ` optimal_control` |
| PMP costate | $\dot p = -\nabla_x\mathcal{H}$, $u^\star=\arg\min_u\mathcal{H}$ | ` optimal_control` |
| MFG (HJB + KFP) | fixed-point $u,m$ | ` mean_field_games` |
| Kalman filter | $K_t = P^-H^\top(HP^-H^\top+R)^{-1}$ | ` optimal_control` |
| MALA | $x'=x-\tfrac{h^2}{2}\nabla U+h\xi$ | ` mcmc` |
2026-03-07 09:44:08 +01:00
| HMM | Baum-Welch EM + Viterbi | ` hmm` |
2026-03-06 19:31:04 +01:00
| Fisher information | $\mathcal{I}_{ij}=\mathbb{E}[\partial_i\ell\,\partial_j\ell]$ | ` hmm`, ` sparse` |
| Natural gradient | $\mathcal{I}^{-1}\nabla_\theta\mathcal{L}$ | ` differential_evolution` |
2026-03-07 09:44:08 +01:00
| Riemannian / Lie geometry | Christoffel symbols, Lie-Poisson equations | experimental |
2026-03-06 19:31:04 +01:00
| DE (jDE) | mutation + crossover + selection | ` differential_evolution` |
2026-03-06 19:14:43 +01:00
---
## References
2026-03-07 09:44:08 +01:00
1. Oksendal, B. *Stochastic Differential Equations* , 6th ed. Springer, 2003.
2026-03-06 19:14:43 +01:00
2. Cont, R. & Tankov, P. *Financial Modelling with Jump Processes* . CRC Press, 2004.
3. Fleming, W.H. & Soner, H.M. *Controlled Markov Processes and Viscosity Solutions* . Springer, 2006.
2026-03-07 09:44:08 +01:00
4. Lasry, J.-M. & Lions, P.-L. "Mean field games." *Jpn. J. Math.* **2** (2007) 229-260.
2026-03-06 19:14:43 +01:00
5. Amari, S. *Information Geometry and Its Applications* . Springer, 2016.
2026-03-07 09:44:08 +01:00
6. do Carmo, M.P. *Riemannian Geometry* . Birkhauser, 1992.
7. Holm, D.D., Marsden, J.E. & Ratiu, T.S. "The Euler-Poincare equations." *Adv. Math.* **137** (1998).
2026-03-06 19:14:43 +01:00
8. Price, K.V., Storn, R.M. & Lampinen, J.A. *Differential Evolution* . Springer, 2005.
9. Roberts, G.O., Gelman, A. & Gilks, W.R. "Weak convergence of Metropolis algorithms." (1997).
10. Merton, R.C. "Option pricing when underlying stock returns are discontinuous." *JFE* **3** (1976).
2026-03-07 09:44:08 +01:00
11. Crandall, M.G. & Lions, P.-L. "Viscosity solutions of Hamilton-Jacobi equations." *Trans. AMS* (1983).
12. Almgren, R. & Chriss, N. "Optimal execution of portfolio transactions." *J. Risk* **3** (2001).
13. Carmona, R. & Delarue, F. *Probabilistic Theory of Mean Field Games* . Springer, 2018.