Skip to content

feat(scalarization): Add pbi#746

Open
ppraneth wants to merge 1 commit into
SimplexLab:mainfrom
ppraneth:scalarization-9
Open

feat(scalarization): Add pbi#746
ppraneth wants to merge 1 commit into
SimplexLab:mainfrom
ppraneth:scalarization-9

Conversation

@ppraneth

Copy link
Copy Markdown
Contributor

Adds PBI (Penalty-based Boundary Intersection) from MOEA/D: A Multiobjective Evolutionary Algorithm Based on Decomposition (Zhang & Li, IEEE TEVC 2007).

PBI originates in the evolutionary-algorithm literature, but it is a differentiable, loss-only scalarization, so it works with gradient-based optimization and fits Scalarizer.forward(values) directly, like STCH and COSMOS. It is a distinct decomposition approach (boundary intersection) that handles non-convex Pareto fronts.

Working

PBI decomposes the values, relative to a reference point $z^{\ast}$, into a component along a preference direction and a component perpendicular to it, then penalizes the perpendicular component. With $\hat r = r / \lVert r \rVert$:

$$d_1 = (L - z^{\ast})^{\top} \hat r, \qquad d_2 = \lVert (L - z^{\ast}) - d_1 \hat r \rVert, \qquad d_1 + \theta, d_2$$

$d_1$ is the distance along the preference direction, $d_2$ is the distance off it, and $\theta$ penalizes the latter. We use the minimization form (footnote 6 in the paper), since TorchJD minimizes losses.

Design

  • theta (the penalty $\theta$): required, validated to be non-negative. 0 reduces PBI to the projection onto the preference direction. The paper uses 5 and notes there is no single best value, with too large or too small a value worsening the result, so there is no default (same choice as STCH's mu and COSMOS's lambda_).
  • weights (the preference $r$): mandatory, gives the decomposition direction, shape-validated at call time. To approximate the whole Pareto front rather than a single trade-off, it should be re-sampled from a Dirichlet distribution and reassigned before each call (documented). Same convention as COSMOS.
  • reference (the ideal point $z^{\ast}$): optional, defaults to the origin, shape-validated. It should be a lower bound on the values. Mirrors STCH's reference.

Numerical stability

$d_2$ is a Euclidean norm, whose gradient is undefined when the values lie exactly on the preference direction ($d_2 = 0$). This is not just an edge case: a single-objective (0-dim) input has no perpendicular component at all, so it always hits $d_2 = 0$. To keep the gradient finite, a small constant is added under the square root ($d_2 = \sqrt{\lVert \cdot \rVert^{2} + \epsilon}$), which shifts the result by at most about $10^{-6}$ at that point and is negligible elsewhere. A test locks this in.

Tests

A value check (PBI(1, weights=[1, 1])([2, 0]) == 2*sqrt(2)), theta = 0 as the pure projection, a reference-shift case, the full formula with non-uniform weights and reference, finiteness of the value and gradient when the values lie on the preference ray (the stability regression test), structure and gradient flow over all input shapes, permutation invariance with uniform weights, negative theta raising, weights and reference shape mismatches raising, and the representations.

@ppraneth ppraneth requested review from a team, PierreQuinton and ValerianRey as code owners June 18, 2026 03:00
@ppraneth ppraneth added cc: feat Conventional commit type for new features. package: scalarization labels Jun 18, 2026
@github-actions github-actions Bot changed the title add pbi feat(scalarization): Add pbi Jun 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cc: feat Conventional commit type for new features. package: scalarization

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant