Convex-Concave Procedure
- Convex-Concave Procedure (CCP) is a method to solve difference-of-convex (DC) programming problems by decomposing objectives and constraints into convex and concave components.
- It iteratively builds convex surrogate subproblems using first-order affine approximations to ensure monotonic progress toward stationarity.
- CCP is applied in areas like combinatorial optimization, sparse recovery, and neural network training, and is implemented through frameworks like DCCP/CVXPY.
The convex-concave procedure (CCP) is an iterative majorization-minimization algorithm for solving general nonconvex optimization problems where the objective and constraint functions have the form of a sum of convex and concave terms, i.e., difference-of-convex (DC) programming. CCP provides a practical heuristic solution framework for wide classes of nonconvex problems in continuous optimization, combinatorial programming, and neural network training where convex relaxation, combinatorial continuation, or alternative gradient-based approaches are inapplicable or inefficient. The algorithm's practical impact derives from its generality, simplicity, and amenability to automatic implementation and disciplined modeling environments such as DCCP/CVXPY.
1. Mathematical Framework
CCP is formulated for optimization problems over :
where each is convex and each is concave. The domain is the intersection of domains where these terms are finite. In this standard DC form, the nonconvexity arises from the concave terms in both objective and constraints—these can encode combinatorial, geometrical, or algebraic nonconvexities such as sparsity, Boolean quadratic constraints, rank, or max-min operators.
2. Core Algorithmic Steps
At each iteration , CCP replaces every concave component by its first-order affine upper approximation at , yielding a convex surrogate. Let be the current iterate, and denote a subgradient. For each such concave term:
which satisfies for all .
The convex subproblem at iteration is
where are slack variables and is a penalty on constraint violation, progressively increased. The problems at each iteration are convex and solvable by standard cone or quadratic programming techniques.
The loop is:
- Initialize , , , and .
- For :
- Compute all subgradients .
- Form and solve the convex subproblem as above to obtain .
- Update .
- Apply convergence criteria such as or objective decrease.
3. Theoretical Properties and Convergence
CCP can be shown, under mild regularity conditions (bounded closed feasible level sets for all DC terms and solvability of the subproblem), to have every limit point of the iterates satisfy stationarity (KKT) conditions for the original DC program:
with , (complementary slackness). CCP is fundamentally a sequential majorization-minimization (MM) algorithm: at each step the convex surrogate majorizes the penalized original objective, guaranteeing monotonicity and convergence to stationary points (not globally optimal solutions in general). These properties are standard in established references (Shen et al., 2016).
4. Domain Constraints and Nondifferentiability
A critical practical aspect is proper handling of concave functions with restricted domains and potential nondifferentiability at domain boundaries. CCP as implemented in DCCP (Shen et al., 2016) extends linearization to handle domain indicators: given a concave function only defined on a convex set , the affine majorant becomes
where is $0$ in-domain and otherwise (enforcing feasibility). To avoid failures in gradient computation when iterates reach the boundary, damping is applied:
This steers iterates to remain in the (relative) interior of the domain, preserving the ability to compute valid affine upper bounds.
5. Implementation: Disciplined Convex-Concave Programming (DCCP) and Ecosystem
DCCP (Shen et al., 2016) is a Python extension of CVXPY that enables disciplined modeling of DC programs for human-developed convex-concave models:
- Express objectives and constraints directly using functions classified as affine, convex, or concave, leveraging CVXPY atoms.
- Each DCCP iteration employs expression-level auto-differentiation to compute affine majorants and reconstitutes the convex subproblem for calling generic cone solvers (e.g., SCS, ECOS).
- Domain constraints are enforced via expression.domain information, ensuring feasibility.
- DCCP introduces slack variables for “relaxed” DC constraints and enforces feasibility and progress through penalty schedules.
- Damping and projection initialization routines are incorporated for robustness.
Minimal code example for nonconvex minimization with :
1 2 3 4 5 6 7 |
import dccp, cvxpy as cp x = cp.Variable() obj = cp.sqrt(x) constr = [x >= -1] prob = cp.Problem(cp.Minimize(obj), constr) res = prob.solve(method='dccp') print("x* =", x.value) |
Applications in DCCP range from combinatorial geometry (circle-packing with nonoverlap), Boolean least-squares, and sparse recovery () to phase retrieval and semidefinite relaxations.
6. Application Domains and Examples
CCP/DCCP enables solution of nonconvex programs in domains including, but not limited to:
- Geometric packing: Nonconvex pairwise-distance constraints for maximal packing subject to convex geometric operators.
- Combinatorial optimization: Boolean least squares, binary quadratic programming, and assignment with nonconvex combinatorial constraints.
- Sparse estimation: Recovery problems with nonconvex, possibly concave sparsity-inducing penalties.
- Neural networks: Training of morphological and dilation-erosion neural architectures that lack subdifferentiable operator structure amenable to gradient descent.
- Statistical arbitrage: Portfolio optimization for statistical arbitrages under nonconvex band constraints (Johansson et al., 12 Feb 2024).
The following table summarizes typical DC decompositions and the resulting subproblem type:
| Problem Type | DC Decomposition | Convex Subproblem |
|---|---|---|
| Sparse recovery | (concave) | QP or SOCP |
| Boolean least squares | , (nonconvex constraint) | QP with relaxation |
| Circle or sphere packing | Pairwise (nonconvex) | SOCP with linearization |
| Morphological neural nets | Max-min compositions, pointwise max-diff (nonconvex) | Convex QP via DCCP |
7. Methodological Considerations and Best Practices
Practical usage of CCP and DCCP requires careful attention to several methodological points:
- Initialization: A feasible is essential for well-behaved convergence; random-projection heuristics are applied if unavailable.
- Penalty scheduling: Penalty is increased geometrically (–$10$, ) to enforce constraints.
- Damping factor : Typical precludes boundary subgradient failures.
- Multiple restarts: Given only stationarity guarantees and nonconvexity, multiple random initializations help avoid poor local optima.
- Solver selection: Choice of cone solver backend (ECOS, SCS) and warm-starting can have significant impact on iteration time.
- Convergence diagnostics: Monitor for small step changes or objective improvements for termination; in highly nonconvex or degenerate cases, empirical judgment is needed.
CCP remains a “heuristic”—no global optimality or approximation guarantees—yet provides a rigorous and general stationarity framework for DC programming, with practical tractability for a range of nonconvex applications leveraging state-of-the-art convex solvers and modeling software (Shen et al., 2016).