lrslib: Convert between representations of convex polyhedra, remove redundant inequalities, convex hull computation, solve linear programs in exact precision, compute Nash-equibria in 2-person games.
lrs [input-file] [output-file]
redund [input-file] [output-file]
fel [input-file] [output-file]
mpirun -np num-proc mplrs input-file [output-file] [options]
lrsnash [options] [input-file]
A polyhedron can be described by a list of inequalities (H-representation) or as by a list of its vertices and extreme rays (V-representation). lrslib is a C library containing programs to manipulate these representations. All computations are done in exact arithmetic.
lrs(1) converts an H-representation of a polyhedron to its V-representation and vice versa, known respectively as the vertex enumeration and facet enumeration problems (see Example (1) below). lrs can also be used to solve a linear program, remove linearities from a system, and extract a subset of columns.
redund(1) removes redundant inequalities in an input H-representation and outputs the remaining inequalities. For a V-representation input it outputs all extreme points and extreme rays. Both outputs can be piped directly into lrs. redund is a link to lrs which performs these functions via the redund and redund_list options.
fel(1) projects an input H-representation onto a given set of variables using Fourier-Motzkin elimination. For a V-representation it extracts the specified columns. The output is non-redundant and can be can be piped directly into lrs. fel is a link to lrs which performs these functions via the eliminate and project options.
mplrs(1) is Skip Jordan's parallel wrapper for lrs/redund/fel.
lrsnash(1) is Terje Lensberg's application of lrs for finding Nash-equilibria in 2-person games.
hvref(1) xvref(1) produce a cross reference list between H- and V-representations.
checkpred(1) is Skip Jordan's utility to create and verify logical formulas for determining whether a given inequality is redundant after eliminating variables, without eliminating the variables.
lrsarith(5) From version 7.1 lrs/redund/mplrs use hybrid arithmetic with overflow checking, starting in 64bit integers, moving to 128bit (if available) and then GMP. Overflow checking is conservative to improve performance: eg. with 64 bit arithmetic, a*b triggers overflow if either a or b is at least 2^31, and a+b triggers an overflow if either a or b is at least 2^62. Typically problems that can be solved in 64bits run 3-4 times faster than with GMP and inputs solvable in 128bits run twice as fast as GMP.
Various arithmetic versions are available and can be built from the makefile.
User's guide for lrslib
David Avis <avis at cs dot mcgill dot ca >
lrs (1), mplrs(1), fel(1), lrsnash(1), hvref(1), xvref(1), checkpred(1), lrsarith(5)
checkpred(1), lrs(1), lrsarith(5), lrsnash(1), lrsscripts(5), mplrs(1).