Sequential Convex Programming (SCP) Framework
The scp_uno package implements a robust Sequential Convex Programming framework integrated with the GEMSEO environment. It is tailored for highly non-linear and non-convex problems such as Topology Optimization.
Overview
The core idea of SCP is to replace a difficult, non-convex optimization problem with a sequence of simpler, convex approximations (subproblems). Each subproblem is solved, the design variables are updated, and a new approximation is constructed until convergence is reached.
Algorithms
The framework provides three major algorithms:
Method of Moving Asymptotes (MMA): The gold standard for topology optimization. It builds a strictly convex approximation by introducing reciprocal variables with dynamically updated asymptotes. This naturally injects curvature, safely preventing reciprocal singularities and steering the optimizer efficiently away from constraint boundaries.
Convex Linearization (CONLIN): A simpler predecessor to MMA. It uses linear approximations for terms with positive derivatives and reciprocal approximations for negative derivatives. To ensure stability and prevent singularities near zero, strict move-limit boxes and lower bounds are actively enforced on the subproblems.
Sequential Linear Programming (SLP): The simplest approximation scheme, completely linearizing the objective and constraints at each iterate. It does not capture curvature and can only reliably descend when paired with strict move-limit bounds. By default, our SLP implementation uses GEMSEO’s exact HiGHS
DUAL_SIMPLEXLP solver, bypassing Jacobian calls in the inner loop.
Monotone Backtracking Line-Search
All approximation algorithms in the framework can optionally enable a Monotone Backtracking Line-Search mechanism (use_line_search=True).
When enabled, the framework: 1. Evaluates an \(L_1\) penalty merit function: \(\phi(x) = f(x) + \mu \sum_i \max(0, c_i(x))\) 2. Checks if the subproblem’s proposed step provides an Armijo sufficient decrease in \(\phi(x)\). 3. If not, it backtracks along the proposed step direction until the merit function decreases.
This serves as a powerful stabilizing safeguard, completely eliminating wild objective spikes and constraint violations when the local convex (or linear) approximations are too optimistic.
Inner Solvers
The convex (or linear) subproblems can be solved by various internal engines:
- Scipy SLSQP: Reliable SQP engine ideal for MMA and CONLIN subproblems.
- HiGHS (Dual Simplex): High-performance exact LP solver utilized natively by SLP.
- Uno: High-performance C++ engine for nonlinearly constrained optimization (via the unopy wrapper).
Settings Configuration
All algorithms share a unified SCPSettings Pydantic model. Key parameters include:
- max_iter: Maximum number of outer iterations.
- max_optimization_step: Strict move limits enforcing maximum design variable change per iteration.
- use_line_search: Toggle for the monotone backtracking line-search.
- line_search_penalty: The \(\mu\) multiplier weighing constraint violations against objective changes.