Regina Calculation Engine
|
Implements a modified primal algorithm for enumerating Hilbert bases. More...
#include <enumerate/hilbertprimal.h>
Static Public Member Functions | |
template<class RayClass , class RayIterator , class OutputIterator > | |
static void | enumerateHilbertBasis (OutputIterator results, const RayIterator &raysBegin, const RayIterator &raysEnd, const EnumConstraints *constraints, ProgressTracker *tracker=0) |
Determines the Hilbert basis that generates all integer points in the intersection of the n-dimensional non-negative orthant with some linear subspace. More... | |
Implements a modified primal algorithm for enumerating Hilbert bases.
This incorporates the primal algorithm described in "Normaliz: Algorithms for affine monoids and rational cones", Winfried Bruns and Bogdan Ichim, J. Algebra 324 (2010), 1098-1113, and has been modified to allow for additional constraints (such as the quadrilateral constraints from normal surface theory).
To summarise: the algorithm first enumerates extremal rays of the rational cone, and then decomposes the admissible region of the cone (where the extra constraints are satisfied) into maximal admissible faces. It calls Normaliz directly to enumerate the Hilbert basis for each maximal admissible faces, and finally combines these into a basis for the entire space.
All routines of interest within this class are static; no object of this class should ever be created.