mplrs(1)
πΈ 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>β ifmplrsgets terminated by-stopor-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 bygnuplot, see below π-hist <file>β store parallelization data in<file>for use bygnuplot, see below π-id <initial depth>β[2]the depth of the original tree search to populate the job listLπ³-lmax <int>β[lmin]if job list|L|>np*lmaxthenmaxcis replaced bymaxc*scale-lmin <int>β[3]if job list|L|<np*lminthen themaxdparameter 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 toLafter generatingmaxcnodes-maxd <depth>β[0]a producer returns all subtrees that are not leaves at depthmaxd. 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>β restartmplrsusing previously created<checkpoint file>. If used with-checkpfile names should be different! β οΈ-scale <int>β[100]used bylmax-stop <stopfile>β terminatemplrsif 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/tmpnot writeable. Using" -temp ./ "will write temporary files to the current directory-time <seconds>β terminatemplrsafter<seconds>of elapsed time β°
πΈ redund/fel options πΈ
-j <int>β[1]if non-zero splits the run into<int>jobs per worker, over-ridingrowsandlastrows-lastp <int>β[10]the percentage of jobs to uselastrows-lastrows <int>β[10]the number of rows for the lastlastpjobs-minrepβ removes redundant inequalities, finds hidden linearities and outputs a minimum representation of the input file. This ignores anyprojectoreliminateoption 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.118141here) - number of busy workers (
94here) - current size of job list (
279here) - number of workers that may return unfinished jobs (
94here) - unused (
0here) - unused (
0here) - total number of jobs that have been in the job list (
373here)
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 π«Ά
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 π
πΈπ¦
π¦ where this page comes from
- debian trixie: mplrs 0.73-2+b1
- fedora 43: lrslib-utils 7.3-6.fc43 Β· GPL-2.0-or-later
- fedora 43: lrslib-utils 7.3a-1.fc43 Β· GPL-2.0-or-later
- fedora 44: lrslib-utils 7.3a-3.fc44 Β· GPL-2.0-or-later
- ubuntu questing: mplrs 0.73-3
- ubuntu resolute: mplrs 0.73-4
- ubuntu stonking: mplrs 0.73-4
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms