mplrs(1)

πŸ“¦
version 7.3a Β· 2 versions
, in debian trixie, fedora 43, fedora 44, ubuntu questing, ubuntu resolute, ubuntu stonking

🌸 mplrs β€” the polyhedra glow-up page πŸ’…

okay bestie, welcome to mplrs from the mplrs 7.3 manual ✨


✨ NAME ✨

mplrs β€” convert between representations of convex polyhedra, remove redundant inequalities, do Fourier-Motzkin elimination (parallel version, no cap 🧚)


🌈 SYNOPSIS 🌈

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

πŸ’– DESCRIPTION πŸ’–

so. a polyhedron can be described either by a list of inequalities (that's the H-representation) or by a list of its vertices and extreme rays (that's the V-representation). mplrs is literally the parallel version of lrs, and it converts an H-representation of a polyhedron to its V-representation, and vice versa. those two problems are known as the vertex enumeration and convex hull problems respectively 🫢

if you've got the lrs options redund or redund_list in the input file, it'll do parallel execution of minrep (computing a minimum representation), see redund(1) πŸ’œ

and if you've got the lrs options project or eliminate in the input file, it'll do parallel execution of fel (Fourier-Motkin elimination) πŸ”₯


πŸŽ€ USAGE πŸŽ€

the number of processors num_proc you hand to mpirun should be 4 or higher. lowkey important. also some lrs input file options are just not supported by mplrs, so don't come for me πŸ™ˆ


✨ OPTIONS ✨

mplrs supports the following options, and the default values are chillin' in brackets:

  • -checkp <checkpoint file> β€” if mplrs gets terminated by -stop or -time, you can restart it using this <checkpoint file> and -restart πŸ’Ύ
  • -countonly β€” don't output vertices/rays/facets, just count them. minimal effort, iconic behaviour πŸ‘‘
  • -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 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, bestie:

54.118141 94 279 94 0 0 373

here's the tea on what each one means:

  • 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. slay.

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 > β€” we stan πŸ’–


🫢 SEE ALSO 🫢

lrs(1), lrslib(5)


and that's the whole page, periodt ✨ this one is from the mplrs manual, version 2024.2.5, dated February 2024 β€” okay love u bye, go enumerate some vertices πŸ’…πŸŒΈπŸ¦‹