mplrs(1)

  Name
mplrs - Convert between representations of convex polyhedra, remove redundant inequalities, do Fourier-Motzkin elimination (parallel version).

  Synopsis

mpirun -np num_proc mplrs infile [outfile] [option...]

  Description

A polyhedron can be described by a list of inequalities (H-representation) or by a list of its vertices and extreme rays (V-representation). mplrs is a parallel version of lrs, and converts an H-representation of a polyhedron to its V-representation, and vice versa. These problems are known respectively as the vertex enumeration and convex hull problems. With lrs options redund or redund_list in the input file it will do parallel execution of minrep (computing a minimum representation), see redund(1). With lrs options project or eliminate in the input file it will do parallel execution of fel (Fourier-Motkin elimination).

  Usage

The number of processors num_proc specified to mpirun should be 4 or higher. Some lrs input file options are not supported by mplrs.

  Options

mplrs supports the following options, where default values are given in brackets.
    -checkp <checkpoint file> if mplrs is terminated by -stop or -time then it can be restarted using this <checkpoint file> and -restart
    -countonly don't output vertices/rays/facets, just count them
    -freq <file> store frequency data in <file> for use by gnuplot, see below
    -hist <file>store parallelization data in <file> for use by gnuplot, see below
    -id <initial depth> [2] the depth of the original tree search to populate the job list L
    -lmax <int>[lmin] if job list |L|>np*lmax then then maxc is replaced by maxc*scale
    -lmin <int>[3] if job list |L|<np*lmin then the maxd parameter is set for all producers
    -maxbuf <n>[500] controls maximum size of worker output buffers
    -maxc <maxcobases>[50 (*scale)] a producer stops and returns all subtrees that are not leaves to L after generating maxc nodes
    -maxd <depth>[0] a producer returns all subtrees that are not leaves at depth maxd. Zero if not used
    -minheight jobs are scheduled in increasing order by height in the search tree (default is LIFO)
    -queue jobs are scheduled in FIFO order (default is LIFO)
    -restart <checkpoint file> restart mplrs using previously created <checkpoint file>. If used with -checkp file names should be different!
    -scale <int>[100] used by lmax
    -stop <stopfile> terminate mplrs if a file with name <stopfile> is created in the current directory
    -stopafter <n> exit after approximately <n> cobases have been computed (no guarantee about how many vertices/rays/facets computed)
    -temp <prefix>[/tmp/] store a temporary file for each process. Should be specified if /tmp not writeable. Using " -temp ./ " will write temporary files to the current directory
    -time <seconds> terminate mplrs after <seconds> of elapsed time
redund/fel options
    -j <int>[1] if non-zero splits the run into <int> jobs per worker, over-riding rows and lastrows
    -lastp <int>[10] the percentage of jobs to use lastrows
    -lastrows <int>[10] the number of rows for the last lastp jobs
    -minrep removes redundant inequalities, finds hidden linearities and outputs a minimum representation of the input file. This ignores any project or eliminate option present in the input file
    -rows <int>[60] the number of rows per job

  -hist file format
Example line:
       54.118141 94 279 94 0 0 373

       time since execution began in seconds (54.118141 here)
       number of busy workers (94 here)
       current size of job list (279 here)
       number of workers that may return unfinished jobs (94 here)
       unused (0 here)
       unused (0 here)
       total number of jobs that have been in the job list (373 here)
The second and fourth entries are similar and can differ due to latencies.

  -freq file format
One integer per line corresponding to the size of a subtree explored by a worker.

  Example

Input file mp5.ine is run with 8 processors. This produced 378 subtrees that were enumerated in parallel using 6 producer cores, 1 core controlling the run and 1 core collecting the output.

          mai20% mpirun -np 8 mplrs mp5.ine mp5.mplrs
          *mplrs:lrslib v.6.0 2015.7.13(lrsgmp.h)8 processes
          *Copyright (C) 1995,2015, David Avis   avis@cs.mcgill.ca
          *Input taken from mp5.ine
          *Output written to: mp5.mplrs
          *Starting depth of 2 maxcobases=50 maxdepth=0 lmin=3 lmax=3 scale=100
          *Phase 1 time: 0 seconds.
          *Total number of jobs: 378, L became empty 4 times
          *Totals: vertices=32 rays=0 bases=9041 integer-vertices=16
          *Elapsed time: 1 seconds.
          2.285u 0.137s 0:01.86 129.5%    0+0k 0+9976io 36pf+0w

  Author
Charles Jordan <skip at res dot otaru-uc dot ac dot jp >

  See also
lrs(1), lrslib(5)