Normaliz - a tool for discrete convex geometry
Normaliz is a open source tool for computations in affine monoids, vector configurations, rational polyhedar and rational cones. The variant QNormaliz now computes algebraic polyhedra, i.e., polyhedra defined over real algebraic extensions of QQ.
- convex hulls and dual cones
- conversion from generators to constraints and vice versa
- projections of cones and polyhedra
- triangulations, disjoint decompositions and Stanley decompositions
- Hilbert basis of rational, not necessarily pointed cones
- normalization of affine monoids
- lattice points of rational polytopes and (unbounded) polyhedra
- Euclidean and lattice normalized volumes of polytopes
- Hilbert (or Ehrhart) series and (quasi) polynomials under Z-gradings (for example, for rational polytopes)
- generalized (or weighted) Ehrhart series and Lebesgue integrals of - polynomials over rational polytopes
Normaliz offers the API libnormaliz that allows the user to access tNormaliz computations from any C++ program.
The frontend Normaliz reads input files and writes output files. There is a wide variety of input types to specify polyhedra and lattices by generators (vertices, extreme rays) or by constraints (inequalities, equations and congruences). The user sets computation goals and chooses algorithmic variants through comman line options.
Online exploration of Normaliz: https://mybinder.org/v2/gh/Normaliz/NormalizJupyter/master
Sample input and output
The file 2cone.in from the directory example contains
amb_space 2 cone 2 1 3 2 1
runs Normaliz with its default computation goals. Ot produces the output file 2cone.out (here typeset in two columns):
4 Hilbert basis elements embedding dimension = 2 2 extreme rays rank = 2 (maximal) 2 support hyperplanes external index = 1 internal index = 5 original monoid is not integrally closed size of triangulation = 1 rank of class group = 0 resulting sum of |det|s = 5 finite cyclic summands: 5: 1 No implicit grading found *********************************************************************** 4 Hilbert basis elements: 2 extreme rays: 1 1 1 3 1 2 2 1 1 3 2 1 2 support hyperplanes: -1 2 3 -1
Each releae contains executables for Linux 64, MacOS X and MS Windows 64.
Normaliz can be called from several other systems:
The Python packages
PyQNormaliz provide an envirinment for interactive access. They are part of the Normaliz repository.
jNormaliz provides a GUI to Normaliz
For its basic functionality Normaliz needs only GMP and Boost. Pararllelization is based on OpenMP. For the computation of integrals CoCoALib is used.
Download and extract
- the source basic package
normaliz-x.y.z.zip(or tar.gz) or the extended source package
x.y.zdenotes the version) from the release page of this repository.
Download and extract
- the executable for your system (
Or compile Normaliz yourself on Linux or MacOS by one of the installation scripts
install_normaliz_with_qnormaliz_eantic.sh(Normaliz and QNormaliz)
available from https://hub.docker.com/r/normaliz/normaliz/