SimplexRedundancyChecker

class SimplexRedundancyChecker(val tolerance: Double = HalfSpace.defaultTolerance, val maxIterations: Int = DEFAULT_MAX_ITERATIONS) : RedundantConstraintChecker(source)

A linear-programming–backed redundancy checker built on Hipparchus's SimplexSolver. A half-space a · x <= b is redundant with respect to a set of other half-spaces exactly when the largest value of a · x over the region defined by the others does not exceed b. This checker therefore solves the LP max a · x s.t. others and declares the target redundant when the optimum is <= b (within tolerance):

  • bounded optimum <= b ⇒ every feasible point already satisfies the target ⇒ redundant;

  • bounded optimum > b ⇒ some feasible point violates the target ⇒ not redundant;

  • unbounded (the others do not bound a · x from above) ⇒ the target can be violated arbitrarily ⇒ not redundant;

  • infeasible others (their intersection is empty) ⇒ the target is vacuously satisfied by every feasible point ⇒ redundant.

Decision variables are treated as free (they may be negative), since the polytope half-spaces are expressed in the problem's natural coordinates, which can include negative values. The semantics match BruteForceRedundancyChecker (Fourier–Motzkin) on the supplied half-space set; this LP-based variant is the recommended choice in higher dimensions, where Fourier–Motzkin elimination can blow up. On any unexpected solver state the checker delegates to a BruteForceRedundancyChecker so a decision is always returned.

This is the LP upgrade described in the ISC implementation plan; it requires the hipparchus-optim dependency.

Parameters

tolerance

the slack used when comparing the LP optimum to the bound; defaults to HalfSpace.defaultTolerance

maxIterations

the simplex iteration cap; must be at least 1

Constructors

Link copied to clipboard
constructor(tolerance: Double = HalfSpace.defaultTolerance, maxIterations: Int = DEFAULT_MAX_ITERATIONS)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
Link copied to clipboard

Functions

Link copied to clipboard
open override fun isRedundant(target: HalfSpace, others: List<HalfSpace>): Boolean

Returns true if target is redundant given others, i.e. the half-space defined by target is implied by the intersection of the others.