saealib.PBIDecomposition#

class saealib.PBIDecomposition(theta=5.0)[source]#

Bases: Decomposition

Penalty-Based Boundary Intersection (PBI) scalarization.

score_i = d1_i + theta * d2_i

where:

  • d1_i = |(f_i - z*) · (w / ‖w‖)| — distance along the weight vector.

  • d2_i = ‖(f_i - z*) - d1_i * (w / ‖w‖)‖ — perpendicular distance.

theta (default 5.0) penalizes deviation from the weight vector direction, controlling the trade-off between convergence and diversity.

Parameters:

theta (float) – Penalty weight for the perpendicular component. The original MOEA/D paper (Zhang & Li, 2007) uses theta = 5.

References

[9]: Zhang, Q., & Li, H. (2007). MOEA/D: A multiobjective evolutionary algorithm based on decomposition. IEEE Transactions on Evolutionary Computation, 11(6), 712-731.

Methods

__init__

aggregate

Compute the PBI scalar score.

contract

Return the decomposition contract.

Method Details

PBIDecomposition.__init__(theta=5.0)[source]#
Parameters:

theta (float)

Return type:

None

PBIDecomposition.aggregate(f, weights, ideal_point)[source]#

Compute the PBI scalar score.

Parameters:
  • f (np.ndarray) – Objective matrix, shape (N, n_obj).

  • weights (np.ndarray) – Non-negative weight vector, shape (n_obj,).

  • ideal_point (np.ndarray) – Ideal (reference minimum) point, shape (n_obj,).

Returns:

Scores, shape (N,). Lower is better.

Return type:

np.ndarray

PBIDecomposition.contract()#

Return the decomposition contract.

Return type:

ComponentContract