16

Optimization

Duality

Theory

Duality is a powerful concept in optimization. Every optimization problem (primal) has an associated dual problem. For convex problems, solving either gives the same optimal value. SVMs are solved via their dual formulation, enabling the kernel trick.

Visualization

Duality visualization

Mathematical Formulation

Lagrangian:
L(x, λ, ν) = f(x) + Σλᵢgᵢ(x) + Σνⱼhⱼ(x)

Dual Function:
g(λ, ν) = infₓ L(x, λ, ν)

Key Results:
• Weak Duality: d* ≤ p*
• Strong Duality: d* = p* (for convex)
• KKT Conditions: Necessary & sufficient for optimality

Code Example

import numpy as np
from scipy.optimize import minimize

# Example: Linear Program and its Dual
# Primal: min c^T x s.t. Ax <= b, x >= 0
# Dual:   max b^T λ s.t. A^T λ <= c, λ >= 0

c = np.array([1, 2])
A = np.array([[1, 1], [2, 1]])
b = np.array([4, 5])

# Solve primal
def primal_obj(x):
    return c @ x

def primal_cons(x):
    return b - A @ x

primal_result = minimize(
    primal_obj, x0=[0, 0],
    bounds=[(0, None), (0, None)],
    constraints={'type': 'ineq', 'fun': primal_cons}
)

# Solve dual
def dual_obj(lam):
    return -(b @ lam)

def dual_cons(lam):
    return c - A.T @ lam

dual_result = minimize(
    dual_obj, x0=[0, 0],
    bounds=[(0, None), (0, None)],
    constraints={'type': 'ineq', 'fun': dual_cons}
)

print(f"Primal optimal: {primal_result.fun:.4f}")
print(f"Dual optimal: {-dual_result.fun:.4f}")
print(f"Duality gap: {abs(primal_result.fun + dual_result.fun):.6f}")