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:

  1. 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.

  2. 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.

  3. 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_SIMPLEX LP solver, bypassing Jacobian calls in the inner loop.

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.