Computing Library › Optimization
Optimization

Kelley's Cutting-Plane Algorithm

Kelley's method minimizes a convex function by building a lower model from its supporting linear pieces and minimizing that model each round.

A piecewise-linear lower model

Kelley's algorithm, from 1960, is the archetypal cutting-plane method for minimizing a convex function f over a compact convex set. Because f is convex, its first-order (tangent) approximation at any point lies below the true function everywhere. Collect several such tangents and their pointwise maximum is a piecewise-linear function that underestimates f.

The iteration

Kronos motion — pid vs model

At iteration k the model is m_k(x) = max over stored points i of ( f(x_i) + g_i^T (x - x_i) ), where g_i is a subgradient at x_i. Minimize this model over the feasible set (a linear program) to get x_{k+1}. Evaluate f and a subgradient there, add the new tangent to the model, and repeat. The model value gives a lower bound and f(x_{k+1}) gives an upper bound, so the gap between them certifies progress.

python
import numpy as np
from scipy.optimize import linprog

def kelley(f, grad, lb, ub, x0, iters=50):
    xs=[x0]; gs=[grad(x0)]; fs=[f(x0)]
    n=len(x0); x=x0
    for _ in range(iters):
        # minimize t s.t. t >= f_i + g_i^T (x - x_i) for all cuts
        A=[]; b=[]
        for xi,gi,fi in zip(xs,gs,fs):
            A.append(np.append(gi,-1)); b.append(gi@xi - fi)
        res=linprog(c=np.append(np.zeros(n),1), A_ub=np.array(A),
                    b_ub=np.array(b), bounds=[(lb,ub)]*n+[(None,None)])
        x=res.x[:n]; xs.append(x); gs.append(grad(x)); fs.append(f(x))
    return x

Behavior

Kelley's method converges for convex problems, and its lower model becomes exact in the limit. It reuses all past information, which can make it more sample-efficient than a subgradient method that forgets everything but the current point. Its notorious drawback is instability: early on the model is a poor approximation, so minimizers can swing to far corners of the feasible set, wasting evaluations.

The bundle fix

Bundle methods cure the instability by adding a proximal term (mu/2)||x - center||^2 to the model minimization, penalizing large jumps from a trusted center point that is advanced only when a real decrease is confirmed. This keeps the reliability of the cut model while damping its wild early behavior, and is the practical descendant of Kelley's original idea.