AlphaDQPSettings

org.appliedtopology.tda4j.alpha.AlphaDQPSettings
final case class AlphaDQPSettings(rankTolerance: Double = ..., feasibilityTolerance: Double = ..., zeroTolerance: Double = ..., equalityTolerance: Double = ..., maxIterationsPerQP: Int = ..., workingSetCapacity: Int = ..., enforceMonotonicity: Boolean = ..., parallel: Boolean = ..., verbose: Boolean = ...)

All tolerances are relative; absolute ones silently break when the point cloud is rescaled.

Value parameters

enforceMonotonicity

clamp each w(sigma) up to the max over its facets. Mathematically a no-op (see below) but removes ~1e-16 violations that would upset a persistence algorithm.

equalityTolerance

consistency threshold for dependent equality constraints (relative to max|U|).

feasibilityTolerance

a constraint counts as violated when its slack exceeds this fraction of max|U|.

maxIterationsPerQP

iteration cap per QP; 0 means 20n + 200.

parallel

run the per-vertex loop on the common ForkJoinPool. Output is deterministic.

rankTolerance

a candidate constraint is treated as linearly dependent on the working set when its Schur complement drops below this fraction of B_jj. 1e-12 is too tight to be safe: a commit can clear that bar while still leaving a Cholesky pivot many orders of magnitude below the problem's natural scale, which silently poisons the factorisation and manifests later as either non-convergence (degenerate cycling between near-duplicate working sets) or, worse, a garbage-but-finite answer. 1e-8 (the textbook sqrt-of-machine-epsilon rule of thumb) is still not always enough margin in practice -- found a case where the poisoning commit's ratio was 1.03e-8, clearing that bar by a hair. 1e-6 sits in the middle of the empirically-verified safe range [1e-7, 1e-5]: 1e-4 starts rejecting genuinely non-degenerate directions and gives a different (wrong) answer.

verbose

print a diagnostic to stderr each time a candidate is dropped for QP non-convergence (see solveAtVertex's "defense in depth" comment). Off by default: this is an accepted, recurring limitation of the active-set method on near-degenerate configurations, not an actionable-every-time event, so a caller running many builds (e.g. a property test) would otherwise get stderr spam proportional to trial count rather than a signal worth reading.

workingSetCapacity

max active set size; 0 means "ambient dimension + 2", which is a hard bound since the active rows live in R^m. Raise it only if you hit the corresponding exception.

zeroTolerance

threshold on multipliers in the ratio tests.

Attributes

Experimental
true
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Members list

Value members

Inherited methods

def productElementNames: Iterator[String]

An iterator over the names of all the elements of this product.

An iterator over the names of all the elements of this product.

Attributes

Inherited from:
Product
def productIterator: Iterator[Any]

An iterator over all the elements of this product.

An iterator over all the elements of this product.

Attributes

Returns

in the default implementation, an Iterator[Any]

Inherited from:
Product