lp_solve - a mixed integer linear programming (MILP) solver
lp_solve [options] [input file]
lp_solve solves mixed integer linear programming problems.
The program accepts models of problems in various different formats
(including custom formats through XLIs) and attempts to solve them. There
are a large number of different options which can be used to alter the
solving process to improve performance or get more accurate results.
The lp file format is a simple, human readable file format for
linear programming models. It is the default format used by
lp_solve.
The format consists of series of statements, each ending in a
semicolon. The first statement is always the objective function, followed by
any number of constraints, followed by any number of declarations.
The objective function consists of an expression to be optimized,
optionally prefixed by max: or min: to specify which direction
to optimize. The default is to maximize.
Each constraint consists of a relational expression, optionally
prefixed by a name followed by a colon. The expression must contain at least
one relational operator (<, <=, =,
=>, >). You can specify ranges two operators at once (e.g.
2 < x < 4) instead of two separate constraints.
Declarations can be one of:
- int var1 [,
var2]... ;
- Marks the variables as integers.
- bin var1 [,
var2]... ;
- Marks the variables as binary (can only take 0 or 1).
- sec var1 [,
var2]... ;
- Marks the variables as semi-continuous. These variables can always take
the value 0 even if it is outside the variable's range.
- free var1 [,
var2]... ;
- Marks the variables as free. These variables have no lower bound, unlike
other variables which have a default lower bound of 0.
- sos [name:]
var1 [, var2]... [< sostype];
- Marks the variables as part of a special ordered set (SOS). Out of the
variables listed, only one can be non-zero at once. If sostype is
specified, then up to that number of variables can be non-zero as long as
they are all adjacent to each other (e.g. for an sostype of 2,
var1 and var2 could be non-zero, but not var1 and
var3).
Both C style comments (/* comment here */) and C++
style comments (// comment until end of line) can be used anywhere in
the file.
- -wafter
- Writes the model after solving it (normally any model conversions are
processed before solving). This is useful if presolving is used to
simplify the model.
- -parse_only
- Parse the input model, but stop before solving it. This can be used to
convert models between formats without solving them.
- -timeout
sec
- Timeout if no solution has be found after sec seconds.
- -nonames
- Ignore variable and constraint names in the input model (this is the same
as combining both -norownames -nocolnames).
- -norownames
- Ignore constraint names in the input model.
- -nocolnames
- Ignore variable names in the input model.
- -min
- Minimizes the LP problem, overriding the setting in the input model.
- -max
- Maximizes the LP problem, overriding the setting in the input model.
- -lp
- Read the model from a file in LP format. This the the default.
- -mps
- Read the model from a file in 'fixed width' MPS format.
- -fmps
- Read the model from a file in 'free' MPS format. This is the same as
-mps except that fields are separated by a number of blanks instead
of starting at fixed columns.
- -wlp
filename
- Converts the input model to LP format and writes it to the a file.
- -wmps
filename
- Converts the input model to 'fixed width' MPS format and writes it to a
file.
- -wfmps
filename
- Converts the input model to 'free' MPS format and writes it to a
file.
- -rxli xliname
filename
- Read the model using an external language interface (XLI). xliname
specifies the path to the shared library containing the XLI, and is
searched for according to the normal library search rules in
ld.so(8) with the addition that the library filename is prefixed
with lib and suffixed with .so if necessary.
- -rxlidata
datafilename
- Provides a file containing extra data used by the reading XLI
library.
- -rxliopt
options
- Extra options to pass to the reading XLI library.
- -wxli xliname
filename
- Converts the input model to the format used by an XLI and writes it to a
file. The format of xliname is described in -rxli
above.
- -wxliopt
options
- Extra options to pass to the writing XLI library.
- -wxlisol
xliname filename
- Writes the model's solution to a file using an XLI library. The format of
xliname is described in -rxli above.
- -wxlisolopt
options
- Extra options to pass to the solution writing XLI library.
- -h
- Print a usage message and exit.
- -Slevel
- Solution detail. Each level builds on top of the previous one and
adds more detail to the solution.
- 0
- print nothing
- 1
- objective value only
- 2
- variables (default level)
- 3
- constraints
- 4
- duals
- 5
- lp model
- 6
- scales
- 7
- lp tableau
- -time
- Print CPU time to parse input and to calculate solution.
- -v[level]
- Verbosity level. Controls the level of messages printed about the
operation of the program.
- 0
- neutral
- 1
- critical
- 2
- severe
- 3
- important (default when -v is provided with no level)
- 4
- normal (default when no -v option is given)
- 5
- detailed
- 6
- full
- -t
- Trace pivot selection.
- -d
- Debug mode. All intermediate results and branch-and-bound decisions are
printed.
- -R
- Report information while solving the model.
- -Db
filename
- Create a dump of internal model variables before solving the model to
given file.
- -Da
filename
- Create a dump of internal model variables after solving the model, to
given file.
- -i[a]
- Print all intermediate valid solutions. If a is used, prints only
non-zero values. Can give useful solutions even if the total run time is
too long.
- -rpar
filename
- Reads a list of parameters from a file. The parameters file can specify
the same options as you can by passing arguments to lp_solve but
can be more convenient if you need to change lots of settings. The format
of the parameters file is in the INI format often used by Windows
applications. All parameters are read from key-value pairs in a single
section. The default section is [Default].
- -rparopt '-h
header'
- Sets options for reading the parameters file. Currently the only option is
-h which changes the section within the file to read the parameters
from.
- -wpar
filename
- Writes a parameters file based on the arguments given to
lp_solve.
- -wparopt '-h
header'
- Sets options for writing the parameter file. Currently the only option is
-h which changes the section within the file to write the
parameters to.
- -rbas
filename
- Reads a basis file which is used as the starting point for solving the LP
model. Basis files must be in MPS basis format.
- -gbas
filename
- Computes a basis from a list of initial guesses for each variable. Each
line of the given file is in the format:
variable:value where value is the initial
guess for variable.
- -wbas
filename
- After solving the LP model, writes a basis file in MPS format. This file
can be read back using -rbas.
Available options:
- 0
- no crash basis (default).
- 1
- most feasible basis.
- 2
- least degenerate basis.
- -noint
- Ignore integer restrictions on variables.
- -f
- Stops the branch and bound algorithm immediately after finding its first
solution.
- -o bound
- Stops the branch and bound algorithm immediately after finding a solution
whose objective function has a value greater than this bound.
- -b bound
- Sets a lower bound for the objective function. The branch and bound
algorithm will immediately reject all solutions lower than this
value.
- -depth
limit
- Sets the depth limit for the branch and bound algorithm. A value of 0
disables depth limiting. A negative value sets a relative depth limit
based on the number of variables in the input model. The default limit is
-50.
- -e tolerance
- Sets the tolerance which is used to determine whether a floating point
number is an integer. A number has to be within this value of an integer
to be considered one. The default value is 1e-7.
- -g tolerance, -ga tolerance
- Sets the absolute MIP gap used by the branch and bound algorithm. This
tolerance is the difference between the best-found solution yet and the
current solution. If the difference is smaller than this tolerance then
the solution (and all the sub-solutions) is rejected. This can result in
faster solving times, but results in a solution which is not the perfect
solution. The default value is 1e-11.
- -gr
tolerance
- Sets the relative MIP gap used by the branch and bound algorithm. This is
similar to the absolute tolerance except that the difference is scaled by
the best found solution before being compared to this tolerance. The
default value is 1e-11.
- -c, -cc
- During branch and bound, take the ceiling branch first.
- -cf
- During branch and bound, take the floor branch first.
- -ca
- During branch and bound, allow the algorithm to decide which branch to
take. This is the default.
- -n solution
- If the branch and bound algorithm produces multiple solutions with the
same objective function value, prints the nth solution. Solution numbers
start at 1.
- -Brule
- Sets a branch and bound rule to use. The default rules are: -B5 -Bg -Bd
-Bc
These rules are mutually exclusive:
- 0
- select lowest indexed non-integer column.
- 1
- selection based on distance from the current bounds.
- 2
- selection based on the largest current bound.
- 3
- selection based on largest fractional value.
- 4
- simple, unweighted pseudo-cost of a variable.
- 5
- extended pseudo-costing strategy based on minimizing the number of integer
infeasibilities.
- 6
- extended pseudo-costing strategy based on maximizing the normal
pseudo-cost divided by the number of infeasibilities.
The above rules can be combined with any of the following:
- w
- WeightReverse - select by criterion minimum (worst), rather than criterion
maximum (best).
- b
- BranchReverse - when -ca is selected, choose the opposite
direction.
- g
- Greedy
- p
- PseudoCost - toggles between weighting based on pseudocost or objective
function value.
- f
- DepthFirst - select the node that has already been selected before the
most number of times.
- r
- Randomize - ddds a randomization factor to the score for any node
candidate.
- G
- GubMode
- d
- Dynamic - when -Bf is selected, switch off this mode when a first
solution is found.
- s
- RestartMode - enables regular restarts of pseudocost value
calculations.
- B
- BreadthFirst - select the node that has been selected before the fewest
number of times or not at all.
- o
- AutoOrder - order variables to improve branch-and-bound performance.
- c
- ReducedCostFixing - do bound tightening during B&B based of reduced
cost info.
- i
- StringInit - initialize pseudo-costs by strong branching.
- -prim,
-simplexpp
- Prefer the primal simplex method for both phase 1 and phase 2.
- -dual,
-simplexdd
- Prefer the dual simplex method for both phase 1 and phase 2.
- -simplexdp
- Prefer the dual simplex method for phase 1 and primal method for phase 2.
This is the default.
- -simplexpd
- Prefer the primal simplex method for phase 1 and dual method for phase
2.
- -bfp
filename
- Sets the basis factorization package to use. filename refers to a
shared library loaded in the same way -rxli loads libraries.
- -ovalue
- Sets whether the objective function is stored in the top row of the
constraint matrix or in separate storage. -o0 places the matrix in
separate storage, and -o1 (the default) places it in the constraint
matrix.
- -Cmode
- Sets the basis crash mode. When base crash is enabled, a heuristic 'crash
procedure' is executed before the first simplex iteration to quickly
choose a basis matrix that has fewer artificial variables. This procedure
tends to reduce the number of iterations to optimality since a number of
iterations are skipped.
- -r value
- Sets the maximum number of pivots between a re-inversion of the matrix.
For stability reasons, lp_solve re-inverts the matrix on regular times.
The default is 250 for the LUSOL bfp and 42 for the other BFPs.
- -trej
value
- Sets the value that is used as a tolerance pivot element to determine
whether a value should be considered as 0. The default is 2e-7.
- -epsd
value
- Sets the value that is used as a tolerance for reduced costs to determine
whether a value should be considered as 0. The default is 1e-9.
- -epsb
value
- Sets the value that is used as a tolerance for the Right Hand Side (RHS)
to determine whether a value should be considered as 0. The default is
1e-10.
- -epsel
value
- Sets the value that is used as a tolerance for rounding values to zero.
The default is 1e-12.
- -epsp
value
- Sets the value that is used as perturbation scalar for degenerative
problems. The default is 1e-5.
- -improvelevel
- Sets the iterative improvement level. level is a number which can
be created by combining the different levels below. The default is
-improve6.
- 0
- none.
- 1
- running accuracy measurement of solved equations on Bx=r.
- 2
- improve initial dual feasibility by bound flips.
- 4
- low-cost accuracy monitoring in the dual.
- 8
- check for primal/dual feasibility at the node level.
- -pivrule
- Sets a simplex pivot rule or mode to use. The default rules are: -piv2
-piva
These rules are mutually exclusive:
- 0
- select first.
- 1
- select according to Dantzig.
- 2
- select Devex pricing from Paula Harris.
- 3
- select steepest edge.
The above rules can be combined with any of the following
modes:
- f
- PrimalFallback - when steepest edge (-priv3) is selected, fallback
to Devex in primal.
- m
- Multiple - preliminary implementation of the multiple pricing scheme. This
means that attractive candidate entering columns from one iteration may be
used in the subsequent iteration, avoiding full updating of reduced costs.
In the current implementation, lp_solve only reuses the 2nd best entering
column alternative
- a
- Adaptive - temporarily use alternative strategy if cycling is
detected.
- r
- Randomize - adds a small randomization effect to the selected pricer.
- ll
- LoopLeft - scan entering/leaving columns left rather than right.
- la
- LoopAlternate - scan entering/leaving columns alternating left/right.
- h
- HarrisTwoPass - use Harris' primal pivot logic rather than the
default.
- t
- TrueNormInit - use true norms for Devex and Steepest Edge
initializations.
- -degenoption
- Specifies if special handling must be done to reduce degeneracy/cycling
while solving. The default options are: -degenf -degens.
Available options:
- c
- ColumnCheck
- d
- Dynamic
- f
- FixedVars
- s
- Stalling
- n
- NumFailure
- l
- Lostfeas
- i
- Infeasible
- b
- DuringBB
- r
- RHSPerturb
- p
- BoundFlip
- -presolve[option]
- Enables a presolve option. These options attempt to speed up calculations
by simplifying the model before solving it. Any of these options can be
combined together. If option is not specified, row and column
presolving is enabled (as if -presolverow -presolvecol had been
used). The default not to presolve.
Available options:
- row
- Rows - presolve rows.
- col
- Cols - presolve columns.
- l
- LinDep - eliminate linearly dependent rows.
- s
- Sos - convert constraints to SOSes (only SOS type 1 handled).
- r
- ReduceMip - if the phase 1 solution process finds that a constraint is
redundant then this constraint is deleted.
- k
- Knapsack - simplification of knapsack-type constraints through addition of
an extra variable, which also helps bound the objective function.
- q
- ElimEQ2 - direct substitution of one variable in 2-element equality
constraints; this requires changes to the constraint matrix.
- m
- MergeRows - merges neighboring >= or <= constraints when the vectors
are otherwise relatively identical into a single ranged constraint.
- fd
- ColFixDual - variable fixing and removal based on considering signs of the
associated dual constraint.
- bnd
- Bounds - does bound tightening based on full-row constraint
information.
- d
- Duals - presolve duals.
- f
- ImpliedFree - identify implied free variables (releasing their explicit
bounds).
- slk
- ImpliedSlk- converts qualifying equalities to inequalities by converting a
column singleton variable to slack.
- g
- ReduceGCD - reduce (tighten) coefficients in integer models based on GCD
argument.
- b
- ProbeFix - attempt to fix binary variables at one of their bounds.
- c
- ProbeReduce - attempt to reduce coefficients in binary models.
- rowd
- RowDominate - identify and delete qualifying constraints that are
dominated by others, also fixes variables at a bound.
- cold
- ColDominate - deletes variables (mainly binary), that are dominated by
others (only one can be non-zero).
- -s[mode] [scalelimit]
- Sets the scaling algorithm and/or scaling limit to use. scalelimit
can only be specified when using the mutually exclusive integer modes.
Omitting mode is the equivalent of using -s4. The default
algorithm and limit is: -s1 5 -si -se
These rules are mutually exclusive:
- 0
- no scaling.
- 1
- geometric scaling.
- 2
- Curtis-Reid scaling.
- 3
- scale to convergence using largest absolute value.
- 4
- numerical range-based scaling.
- 5
- scale to convergence using logarithmic mean of all values.
- 6
- scale based on the simple numerical range.
- 7
- scale quadratic.
The above rules can be combined with any of the following:
- p
- also do power scaling.
- i
- also scale integer variables.
- e
- ensure no scaled number is outside the range -1..1.
The following example shows a model being solved by
lp_solve. The first line contains the objective function to be
maximized and the last 3 lines contain the constraints.
$ cat example.lp
max: 143 x + 60 y;
120 x + 210 y <= 15000;
110 x + 30 y <= 4000;
x + y <= 75;
$ lp_solve -S3 example.lp
Value of objective function: 6315.63
Actual values of the variables:
x 21.875
y 53.125
Actual values of the constraints:
R1 13781.2
R2 4000
R3 75
This example converts a file in lp format to mps format.
$ lp_solve -parse_only -lp example.lp -wmps example.mps