Optimization - Maple Programming Help

Online Help

All Products    Maple    MapleSim

Home : Support : Online Help : Mathematics : Optimization : Optimization Package : Optimization/Minimize





minimize an objective function, possibly subject to constraints




maximize an objective function, possibly subject to constraints


Calling Sequence







Calling Sequence

Minimize(obj, constr, bd, opts)

Maximize(obj, constr, bd, opts)

Minimize(opfobj, ineqcon, eqcon, opfbd, opts)

Maximize(opfobj, ineqcon, eqcon, opfbd, opts)




algebraic; objective function



(optional) set(relation) or list(relation); constraints



(optional) sequence of name = range; bounds for one or more variables



procedure; objective function



(optional) set(procedure) or list(procedure) ; inequality constraints



(optional) set(procedure) or list(procedure); equality constraints



(optional) sequence of ranges; bounds for all variables



(optional) equation(s) of the form option = value where option is one of assume, feasibilitytolerance, infinitebound, initialpoint, iterationlimit, optimalitytolerance, output, or useunits; specify options for the Minimize or Maximize command



The Minimize command computes a local minimum of an objective function, possibly subject to constraints.  If the problem is convex (for example, when the objective function and constraints are linear), the solution will also be a global minimum.  The Maximize command is similar to the Minimize command except that it computes a local maximum.  The algorithms that both commands use assume the objective function and constraints are twice continuously differentiable.


Both commands accept the optimization problem in algebraic or operator form. See the Optimization/AlgebraicForm and Optimization/OperatorForm help pages.  These commands work by calling other commands in the Optimization package based on the form of the input. Setting infolevel[Optimization] to an integer value greater than 0 will give information about the solution process as the commands are called.


The first two calling sequences use the algebraic form of input.  The first parameter obj is the objective function, which must be an algebraic expression.


The second parameter constr is optional and is a set or list of relations (of type `<=` or `=`) involving 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, bd, 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 last two calling sequences use the operator form of input.  The objective function opfobj must be a procedure that accepts n floating-point parameters representing the problem variables x1, x2, ..., xn and returns a float.


Inequality and equality constraints are provided using the optional ineqcon and eqcon parameters. An inequality constraint, vx1&comma;x2&comma;...&comma;xn0, is specified by a procedure v in ineqcon that has the same form as opfobj and returns the left-hand side value of the constraint. Similarly, an equality constraint wx1&comma;x2&comma;...&comma;xn=0 is specified by a procedure w in eqcon.  Either ineqcon or eqcon can be empty.


Bounds, opfbd, on the variables are optional, but if given must be a sequence of exactly n ranges corresponding in order to x1, x2, ..., xn.


For either form of input, non-negativity of the variables is not assumed by default, but can be specified using the assume = nonnegative option.  Bounds can include values having type infinity.


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.


The Minimize and Maximize commands call one of the Optimization[LPSolve], Optimization[QPSolve] or Optimization[NLPSolve] commands, depending on the form of the input. Input provided in operator form always results in a call to Optimization[NLPSolve].  For more control over the solution process, or to use the more efficient Matrix form of input described in Optimization/MatrixForm, use LPSolve, QPSolve, or NLPSolve directly.  Minimize and Maximize do not accept problems in least-squares form. To solve such problems, use the Optimization[LSSolve] command.



The opts argument can contain one or more of the following options. The list below contains the options applicable to most or all of the Optimization package commands called by Minimize or Maximize.  Additional options accepted by specific commands can also be passed to Minimize and Maximize.  For a full list of options, see the Optimization/Options help page.  Each target command uses a variety of internal solvers. If an option is not used by a particular solver, a warning will be issued.


assume = nonnegative -- Assume that all variables are non-negative.


feasibilitytolerance = realcons(positive) -- Set the maximum absolute allowable constraint violation.


infinitebound = realcons(positive) -- Set any value greater than the infinitebound value to be equivalent to infinity during the computation.


initialpoint = set(equation), list(equation), or list(numeric) --  Use the provided initial point, which is a set or list of equations varname=value (for algebraic form input) or a list of exactly n values (for operator form input).


iterationlimit = posint -- Set the maximum number of iterations performed by the algorithm.


optimalitytolerance = realcons(positive) -- Set the tolerance that determines whether an optimal point has been found. This option is not available for linear or quadratic problems.


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 when the objective function is in algebraic form.



The Minimize and Maximize commands use various methods implemented in a built-in library provided by the Numerical Algorithms Group (NAG).   The solvers are iterative in nature and require an initial point. The quality of the solution can depend greatly on the point chosen, especially for nonlinear problems.  It is recommended that you provide a point using the initialpoint option. Otherwise, a point is automatically generated.


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. However, in many cases the input may contain units which will be checked for consistency before being converted into a purely floating-point input.  See Optimization/Units for more details.


Although the assume = nonnegative option is accepted, general assumptions are not supported by commands in the Optimization package.





Minimize(cos(x), initialpoint = {x=1});



Minimize(cos(x), initialpoint = {x=10*Unit(deg)});



Minimize(2*x+y, {4*x-y<=9, x+y>=4}, assume = nonnegative);



Minimize((x-1)^2 + (x-y)^2, {x*(1+y^2)>=8});



Minimize((x-1)^2 + (y-1)^2 + (z-1)^2, {x*(1+y^2+z^2)>=8});



Maximize(2*x^2+y+2*y^2, {y^2-x<=2, 2*x+y<=6});



Maximize(2*x^2+2*y^2, {y^2-x^2<=0, 2*x+y<=0});



Minimize( 2*Pi*R^2+2*Pi*R*L+Pi*R*sqrt(H^2+R^2), {(2/3)*Pi*R^3+Pi*R^2*L+(1/3)*Pi*R^2*H = 3*Unit('m'^3), 0 <= H, 0 <= L, 0 <= R} );





The Optimization[Minimize] and Optimization[Maximize] commands were 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