NicheIdentifier

class NicheIdentifier(val checker: RedundantConstraintChecker = BruteForceRedundancyChecker())(source)

Niche identification for the ISC global phase (Algorithm 2). Operating over the population (not all of the feasible region), it finds the niche centers L: population members that are at least as good as every one of their active neighbors. A member j is an active neighbor of i when the COMPASS halfway hyperplane separating i from j actively bounds i's most-promising area — i.e. it is not redundant given i's other halfway hyperplanes and the problem's original linear constraints. This is exactly the active-set structure the COMPASS pruner uses, so it is reused here via the same RedundantConstraintChecker.

From the centers it derives the niche radius r = ½ · min‖x_i − x_j‖ over the centers and the niche count q = |L|, then assigns each population member to the nearest center within r.

Because identification runs over the population (size m_G), the brute-force redundancy checker is tractable; the cost is O(m_G²) redundancy tests, each over O(m_G) half-spaces.

Parameters

checker

the redundancy strategy used to decide which neighbors are active

Constructors

Link copied to clipboard
constructor(checker: RedundantConstraintChecker = BruteForceRedundancyChecker())

Properties

Link copied to clipboard

Functions

Link copied to clipboard
fun identify(population: List<Solution>, problemDefinition: ProblemDefinition, compareSolutions: (Solution, Solution) -> Int): NicheResult

Identifies the niches in population for problemDefinition. compareSolutions orders solutions best-first (negative when the first argument is better), matching the solver's ksl.simopt.solvers.Solver.compare.