Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

 Open In Colab

Trust region methods define a region (a ball with radius Δk\Delta_k) around the current guess in which the actual function is trusted to behave like a local model function (typically a second-order Taylor expansion). They are designed to improve robustness for complex surfaces, including indefinite and ill-conditioned regions.

They are geometrically dual to line search methods:

  • Line search: Choose a search direction pk\mathbf{p}_k first, then search along that 1D ray for step length αk\alpha_k.

  • Trust region: Choose a maximum step radius Δk\Delta_k first, then solve for the optimal direction and step vector sk\mathbf{s}_k satisfying ∥sk∥≤Δk\|\mathbf{s}_k\| \le \Delta_k.

If the actual reduction f(xk)−f(xk+sk)f(\mathbf{x}_k) - f(\mathbf{x}_k + \mathbf{s}_k) agrees well with the model prediction, the step is accepted and the trust radius Δk+1\Delta_{k+1} is expanded; if agreement is poor, the step is rejected and Δk\Delta_k is shrunk.

Comparison of optimization methods

The primary unconstrained optimization families available in numerical scientific packages like scipy.optimize are:

CategoryOptimization TechniqueSciPy Method Identifier
Line Search (Quasi-Newton)Broyden-Fletcher-Goldfarb-Shanno (BFGS)'BFGS'
Limited-memory BFGS (bound constrained)'L-BFGS-B'
Newton-Conjugate-Gradient'Newton-CG'
Trust RegionTrust-Region Nearly Exact'trust-exact'
Trust-Region Newton-CG'trust-ncg'
Trust-Region Truncated Generalized Lanczos'trust-krylov'
Direct / Derivative-FreeNelder-Mead Downhill Simplex'Nelder-Mead'
Powell’s Conjugate Direction Method'Powell'
First-Order GradientNon-linear Conjugate Gradient'CG'

Example: Comparing optimizers on Himmelblau’s function

Himmelblau’s function has four identical global minima where f(x1,x2)=0f(x_1, x_2) = 0. Let’s test the 'trust-exact' trust-region solver starting from x0=(1.5,2.0)\mathbf{x}_0 = (1.5, 2.0):

(Try swapping 'trust-exact' for 'BFGS', 'Newton-CG', or 'Nelder-Mead' to observe how different algorithm families traverse the multiminimum landscape!)