Optimization
LPSolve
solve a linear program
Calling Sequence
Parameters
Description
General Options
Integer Programming Options
Continuous Programming Options
Notes
Examples
Compatibility
LPSolve(obj, constr, bd, opts)
obj
-
algebraic; linear objective function
constr
(optional) set(relation) or list(relation); linear constraints
bd
(optional) sequence of name = range; bounds for one or more variables
opts
(optional) equation(s) of the form option = value where option is one of assume, binaryvariables, depthlimit, feasibilitytolerance, infinitebound, initialpoint, integertolerance, integervariables, iterationlimit, maximize, method, nodelimit, output, or useunits; specify options for the LPSolve command
The LPSolve command solves a linear program (LP), which involves computing the minimum (or maximum) of a linear objective function subject to linear constraints.
Continuous, integer, mixed-integer and binary (or zero-one) LPs can be solved. Throughout this page, the term integer programming is used to represent all forms of integer programs. Integer programs are specified using the assume, integervariables or binaryvariables options. See the following Integer Programming Options section for more information.
This help page describes the use of the LPSolve command when the LP is specified in algebraic form. A summary of this form is given in the Optimization/AlgebraicForm help page. LPSolve also recognizes the problem in Matrix form (see the LPSolve (Matrix Form) help page). Matrix form leads to more efficient computation, but is more complex.
LPSolve uses either an active-set or interior point method. See the method= option described below.
The first parameter obj is the objective function, which must be a linear algebraic expression.
The second parameter constr is optional and is a set or list of relations (of type `<=` or `=`), linear in the problem variables. The problem variables are the indeterminates of type name found in obj and constr. They can also be specified using the variables option.
Bounds on one or more of the variables are given as additional arguments, each of the form varname=varrange where varname is a variable name and varrange is its range. The range endpoints can in general include values of type infinity. For the interior point method, however, the lower bounds must be finite. Non-negativity of the problem variables is not assumed by default, but can be specified with the assume = nonnegative option.
Maple returns the solution as a list containing the final minimum (or maximum) value and a point (the extremum). If the output = solutionmodule option is provided, then a module is returned. See the Optimization/Solution help page for more information.
If you only need a feasible point for the problem, use 0 as the first argument to LPSolve followed by constraints and/or bounds.
The Optimization[ImportMPS] command can be used to import MPS(X) data files. This command returns a combined Matrix and Vector representation of the LP that can be sent to the LPSolve command using the Matrix form of input. For more information, see the LPSolve (Matrix Form) help page.
The opts argument can contain one or more of the following options. These options apply to all forms of LPs accepted by the LPSolve command and are described in more detail in the Optimization/Options help page. See the following Integer Programming Options and Continuous Programming Options sections for additional options that only apply to either integer or continuous programs.
assume = nonnegative -- Assume all variables are non-negative.
feasibilitytolerance = realcons(positive) -- For the active-set method, set the maximum absolute allowable constraint violation. For the interior point method, set the tolerance for the sum of the relative constraint violation and relative duality gap.
infinitebound = realcons(positive) -- For the active-set method, set any value of a variable greater than the infinitebound value to be equivalent to infinity during the computation. This option is ignored when using the interior point method.
initialpoint = set(equation) or list(equation) -- Use the provided initial point, which is a set or list of equations varname=value.
iterationlimit = posint -- Set the maximum number of iterations performed by the active-set or interior point algorithm.
maximize or maximize = truefalse -- Maximize the objective function when equal to true and minimize when equal to false. The option 'maximize' is equivalent to maximize = true. The default is maximize = false.
output = solutionmodule -- Return a module as described in the Optimization/Solution help page.
useunits = true or false or a list. See Optimization/Units.
variables = list(name) or set(name) -- Specify the problem variables.
The opts argument can contain one or more of the following options. These options only apply to integer programs and are described in more detail in the Optimization/Options help page.
assume = binary, integer or nonnegint -- Assume all variables take on binary (0 or 1), integer or non-negative integer values.
binaryvariables = list(name) or set(name) -- Specify the problem variables that only take the values 0 or 1.
depthlimit = posint -- Set the maximum depth of the branch-and-bound tree.
integertolerance = realcons(positive) -- Specify the maximum acceptable absolute violation in a value for it to be considered an integer.
integervariables = list(name) or set(name) -- Specify the problem variables that only take integer values.
nodelimit = nonnegint -- Set the maximum number of nodes searched in the branch-and-bound tree. A value of 0 means all nodes are investigated.
The opts argument can contain one or more of the following options. These options only apply to continuous programs and are described in more detail in the Optimization/Options help page.
method = activeset, interiorpoint -- Specify whether to use the active-set or interior point algorithms. If neither method is requested, a heuristic is used to choose the method. In general, the interior point method will be more efficient for large, sparse problems. See the notes below for further details on each algorithm. If the input is given in Matrix form and the constraint matrices have the storage=sparse option set, the interior point method will be used. Otherwise, the heuristic is based on the number of variables, constraints, and the density of the constraint coefficient matrices.
For continuous programs, the LPSolve command uses one of two methods. The first method is an iterative active-set method implemented in a built-in library provided by the Numerical Algorithms Group (NAG). The second method is a sparse iterative interior point method developed by Dr. H. Wolkowicz at the University of Waterloo and colleagues, based on the following paper:
M. Gonzalez-Lima, H. Wei, H. Wolkowicz. "A stable primal-dual approach for linear programming under nondegeneracy assumptions." Computational Optimization and Applications. Vol. 44. (2009): 213-247.
The interior point method requires that all variables be bounded either above or below.
For both methods, an initial point can be provided using the initialpoint option. Otherwise, a default point is used.
Integer programs are solved using a branch-and-bound strategy in which a tree of nodes is created. Each node corresponds to a continuous LP subproblem which is solved using the active-set method.
The computation is performed in floating-point. Therefore, all data provided must have type realcons and all returned solutions are floating-point, even if the problem is specified with exact values. For more information about numeric computation in the Optimization package, see the Optimization/Computation help page. The only situation in which the output is not floating-point is when integer variables are specified. In this case, and only with algebraic and operator input, the final values for the integer variables are rounded to the nearest integer.
Although parameters constr and bd are optional, LPSolve returns an error if it does not detect at least one constraint (in the form of a general constraint), a bound, or the assume = nonnegative option.
LPSolve returns an error if the problem is infeasible. If the problem appears to be unbounded, LPSolve issues a warning and returns the last computed result. This result may be meaningless.
Although the assume option is accepted, general assumptions are not supported by commands in the Optimization package.
with⁡Optimization:
Use LPSolve to minimize a linear function of two variables subject to four linear constraints.
LPSolve⁡−4⁢x−5⁢y,0≤x,0≤y,x+2⁢y≤6,5⁢x+4⁢y≤20
−19.,x=2.66666666666667,y=1.66666666666667
Use the assume = nonnegative option instead of including non-negative constraints explicitly.
LPSolve⁡−x−y,y≤3⁢x+12,y≤−5⁢x+2,assume=nonnegative
−1.25000000000000,x=0.187500000000000,y=1.06250000000000
Simple bounds can be added separately.
LPSolve⁡−6⁢x+4⁢y+z,−x+3⁢y≤3,5⁢x−10⁢y≤20,2⁢z−3⁢y=6,x=1..20,y=0..∞
−66.5000000000000,x=18.0000000000000,y=7.00000000000000,z=13.5000000000000
Use the maximize option to maximize the objective function.
LPSolve⁡−7⁢x+2⁢y,−x+3⁢y≤3,4⁢x−12⁢y≤20,x=−5..5,y=0..∞,maximize
21.,x=−3.,y=0.
Use the integer option to solve integer programming problems.
LPSolve⁡−5⁢x−7⁢y,7⁢x+y≤35,−x+3⁢y≤6,assume=integer
−41,x=4,y=3
The nonnegint option can be used to get non-negative integer values.
LPSolve⁡2⁢x+5⁢y,x−y≤5,3⁢x−y=1,assume=integer,nonnegative
12,x=1,y=2
The method option was introduced in Maple 15.
For more information on Maple 15 changes, see Updates in Maple 15.
The Optimization[LPSolve] command was updated in Maple 2018.
The useunits option was introduced in Maple 2018.
For more information on Maple 2018 changes, see Updates in Maple 2018.
See Also
examples/OptimizationLPSolve
Optimization/AlgebraicForm
Optimization/Computation
Optimization/MatrixForm
Optimization/Options
Optimization/Solution
Optimization[ImportMPS]
Optimization[LPSolve] (MatrixForm)
realcons
Download Help Document