Second-Order Cone Programming
Second-order cone programming optimizes a linear objective subject to constraints that a norm is bounded by an affine function, generalizing quadratic programs.
The cone constraint
A second-order cone program (SOCP) minimizes a linear objective subject to one or more constraints of the form ||A x + b|| <= c^T x + d, where the norm is the standard Euclidean norm. Each such constraint says a point lies inside a second-order cone, also called the ice-cream or Lorentz cone. These constraints are convex, so SOCPs are efficiently and reliably solvable.
What it generalizes
SOCP sits between linear programming and semidefinite programming in the tractability hierarchy. Linear programs are SOCPs with trivial (zero-radius) cones. Convex quadratic programs and quadratically constrained quadratic programs can be recast as SOCPs. So a single SOCP solver handles LP, QP, and QCQP as special cases, while remaining much cheaper than a general SDP.
Problems that fit
The norm-bound form captures many practical conditions directly. Robust linear programming with ellipsoidal uncertainty becomes an SOCP: hedging against uncertainty in a constraint's coefficients turns a linear constraint into a norm constraint. Portfolio problems with a variance limit, minimum-enclosing-ball and facility-location problems, and control problems with quadratic energy limits are all SOCPs.
- Robust LP with ellipsoidal coefficient uncertainty
- Euclidean facility location and minimum enclosing ball
- Norm-bounded control effort and signal-power limits
- Quadratically constrained quadratic programs after reformulation
import cvxpy as cp, numpy as np
# minimize c^T x s.t. ||A x + b||_2 <= d
x = cp.Variable(3)
A = np.random.randn(4,3); b = np.random.randn(4); c = np.ones(3)
prob = cp.Problem(cp.Minimize(c @ x), [cp.norm(A @ x + b, 2) <= 5])
prob.solve()
Why it is a sweet spot
SOCP is often the best home for a problem: expressive enough to model Euclidean norms, ellipsoidal uncertainty, and convex quadratics, yet solved by interior-point methods almost as efficiently as linear programs. When a modeling need pushes past linear programming, casting it as an SOCP rather than jumping to a full SDP usually preserves both accuracy and speed.