Constrained Optimization: Wolfram Mathematica® Tutorial Collection

Download as pdf or txt
Download as pdf or txt
You are on page 1of 76

Wolfram Mathematica® Tutorial Collection

CONSTRAINED OPTIMIZATION
For use with Wolfram Mathematica® 7.0 and later.

For the latest updates and corrections to this manual:


visit reference.wolfram.com
For information on additional copies of this documentation:
visit the Customer Service website at www.wolfram.com/services/customerservice
or email Customer Service at info@wolfram.com
Comments on this manual are welcomed at:
comments@wolfram.com
Content authored by:
Brett Champion, Adam Strzebonski

Printed in the United States of America.


15 14 13 12 11 10 9 8 7 6 5 4 3 2

©2008 Wolfram Research, Inc.


All rights reserved. No part of this document may be reproduced or transmitted, in any form or by any means,
electronic, mechanical, photocopying, recording or otherwise, without the prior written permission of the copyright
holder.
Wolfram Research is the holder of the copyright to the Wolfram Mathematica software system ("Software") described
in this document, including without limitation such aspects of the system as its code, structure, sequence,
organization, “look and feel,” programming language, and compilation of command names. Use of the Software unless
pursuant to the terms of a license granted by Wolfram Research or as otherwise authorized by law is an infringement
of the copyright.
Wolfram Research, Inc. and Wolfram Media, Inc. ("Wolfram") make no representations, express,
statutory, or implied, with respect to the Software (or any aspect thereof), including, without limitation,
any implied warranties of merchantability, interoperability, or fitness for a particular purpose, all of
which are expressly disclaimed. Wolfram does not warrant that the functions of the Software will meet
your requirements or that the operation of the Software will be uninterrupted or error free. As such,
Wolfram does not recommend the use of the software described in this document for applications in
which errors or omissions could threaten life, injury or significant loss.
Mathematica, MathLink, and MathSource are registered trademarks of Wolfram Research, Inc. J/Link, MathLM,
.NET/Link, and webMathematica are trademarks of Wolfram Research, Inc. Windows is a registered trademark of
Microsoft Corporation in the United States and other countries. Macintosh is a registered trademark of Apple
Computer, Inc. All other trademarks used herein are the property of their respective owners. Mathematica is not
associated with Mathematica Policy Research, Inc.
Contents

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Optimization Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Global Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Local Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Solving Optimization Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Linear Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
The LinearProgramming Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Importing Large Datasets and Solving Large-Scale Problems . . . . . . . . . . . . . . . . . . . 10
Application Examples of Linear Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Algorithms for Linear Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Numerical Nonlinear Local Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
The FindMinimum Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Examples of FindMinimum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Numerical Algorithms for Constrained Local Optimization . . . . . . . . . . . . . . . . . . . . . . . 39

Numerical Nonlinear Global Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
The NMinimize Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Numerical Algorithms for Constrained Global Optimization . . . . . . . . . . . . . . . . . . . . . . 45

Exact Global Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Optimization by Cylindrical Algebraic Decomposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Linear Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Univariate Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Optimization by Finding Stationary and Singular Points . . . . . . . . . . . . . . . . . . . . . . . . . 62
Optimization over the Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Comparison of Constrained Optimization Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67


Constrained Optimization References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Introduction to Constrained Optimization
in Mathematica

Optimization Problems
Constrained optimization problems are problems for which a function f HxL is to be minimized or
maximized subject to constraints FHxL. Here f : n Ø  is called the objective function and FHxL is
a Boolean-valued formula. In Mathematica the constraints FHxL can be an arbitrary Boolean
combination of equations gHxL  0, weak inequalities gHxL ¥ 0, strict inequalities gHxL > 0, and x œ 
statements. The following notation will be used.

Min f HxL
(1)
s.t. FHxL

stands for "minimize f HxL subject to constraints FHxL", and

Max f HxL
(2)
s.t. FHxL

stands for "maximize f HxL subject to constraints FHxL".

You say a point u œ n satisfies the constraints F if FHuL is true.

The following describes constrained optimization problems more precisely, restricting the discus-
sion to minimization problems for brevity.

Global Optimization
A point u œ n is said to be a global minimum of f subject to constraints F if u satisfies the con-
straints and for any point v that satisfies the constraints, f HuL § f HvL.

A value a œ  ‹ 8-¶, ¶< is said to be the global minimum value of f subject to constraints F if for
any point v that satisfies the constraints, a § f HvL.

The global minimum value a exists for any f and F. The global minimum value a is attained if
there exists a point u such that FHuL is true and f HuL ã a. Such a point u is necessarily a global
minimum.

If f is a continuous function and the set of points satisfying the constraints F is compact (closed
and bounded) and nonempty, then a global minimum exists. Otherwise a global minimum may
2 Constrained Optimization

If f is a continuous function and the set of points satisfying the constraints F is compact (closed
and bounded) and nonempty, then a global minimum exists. Otherwise a global minimum may
or may not exist.

Here the minimum value is not attained. The set of points satisfying the constraints is not
closed.
In[1]:= MinimizeA9x, x2 + y2 < 1=, 8x, y<E

Minimize::wksol :
Warning: There is no minimum in the region described by the constraints; returning a result
on the boundary. à
Out[1]= 8-1, 8x Ø -1, y Ø 0<<

Here the set of points satisfying the constraints is closed but unbounded. Again, the minimum
value is not attained.
In[3]:= MinimizeA9x2 , x y ã 1=, 8x, y<E

Minimize::natt : The minimum is not attained at any point satisfying the given constraints. à

Out[3]= 80, 8x Ø Indeterminate, y Ø Indeterminate<<

The minimum value may be attained even if the set of points satisfying the constraints is
neither closed nor bounded.
In[4]:= MinimizeA9x2 + Hy - 1L2 , y > x2 =, 8x, y<E
Out[4]= 80, 8x Ø 0, y Ø 1<<

Local Optimization
A point u œ n is said to be a local minimum of f subject to constraints F if u satisfies the con-
straints and, for some r > 0, if v satisfies v - u < r Ï FHvL, then f HuL § f HvL.

A local minimum may not be a global minimum. A global minimum is always a local minimum.

Here FindMinimum finds a local minimum that is not a global minimum.

In[18]:= FindMinimumA3 x4 - 28 x3 + 84 x2 - 96 x + 42, 8x, 1.1<E


Out[18]= 85., 8x Ø 1.<<

In[19]:= MinimizeA3 x4 - 28 x3 + 84 x2 - 96 x + 42, 8x<E


Out[19]= 8-22, 8x Ø 4<<
Constrained Optimization 3

In[20]:= PlotA3 x4 - 28 x3 + 84 x2 - 96 x + 42, 8x, 0, 5<E


40

30

20

Out[20]= 10

1 2 3 4 5
-10

-20

Solving Optimization Problems


The methods used to solve local and global optimization problems depend on specific problem
types. Optimization problems can be categorized according to several criteria. Depending on
the type of functions involved there are linear and nonlinear (polynomial, algebraic, transcenden -
tal, ...) optimization problems. If the constraints involve x œ , you have integer and mixed
integer-real optimization problems. Additionally, optimization algorithms can be divided into
numeric and symbolic (exact) algorithms.

Mathematica functions for constrained optimization include Minimize, Maximize, NMinimize


and NMaximize for global constrained optimization, FindMinimum for local constrained optimiza-
tion, and LinearProgramming for efficient and direct access to linear programming methods.
The following table briefly summarizes each of the functions.

Function Solves Algorithms


FindMinimum , FindMaximum numeric local optimization linear programming methods,
nonlinear interior point algorithms,
utilize second derivatives
NMinimize , NMaximize numeric global optimization linear programming methods,
Nelder-Mead, differential evolution,
simulated annealing, random search
Minimize , Maximize exact global optimization linear programming methods,
cylindrical algebraic decomposition,
Lagrange multipliers and other
analytic methods, integer linear
programming
LinearProgramming linear optimization linear programming methods
(simplex, revised simplex, interior
point)

Summary of constrained optimization functions.

Here is a decision tree to help in deciding which optimization function to use.


4 Constrained Optimization

Here is a decision tree to help in deciding which optimization function to use.

Is your problem linear?

Yes No

LinearProgramming Do you want a global optimum?

Out[2]= Yes No

Do you want an exact solution? Is your problem small?

Yes No Yes No

Minimize NMinimize FindMinimum

Linear Programming

Introduction
Linear programming problems are optimization problems where the objective function and
constraints are all linear.

Mathematica has a collection of algorithms for solving linear optimization problems with real
variables, accessed via LinearProgramming, FindMinimum , FindMaximum , NMinimize,
NMaximize, Minimize, and Maximize. LinearProgramming gives direct access to linear program-
ming algorithms, provides the most flexibility for specifying the methods used, and is the most
efficient for large-scale problems. FindMinimum , FindMaximum , NMinimize, NMaximize,
Minimize, and Maximize are convenient for solving linear programming problems in equation
and inequality form.
Constrained Optimization 5

This solves a linear programming problem

Min x + 2y
s.t. -5 x + y = 7
x + y ¥ 26
x ¥ 3, y ¥ 4

using Minimize .
In[1]:= Minimize@8x + 2 y, - 5 x + y ã 7 && x + y ¥ 26 && x ¥ 3 && y ¥ 4<, 8x, y<D
293 19 137
Out[1]= : , :x Ø , yØ >>
6 6 6

This solves the same problem using NMinimize. NMinimize returns a machine-number
solution.
In[2]:= NMinimize@8x + 2 y, - 5 x + y ã 7 && x + y ¥ 26 && x ¥ 3 && y ¥ 4<, 8x, y<D
Out[2]= 848.8333, 8x Ø 3.16667, y Ø 22.8333<<

This solves the same problem using LinearProgramming.


In[3]:= LinearProgramming@81, 2<, 88- 5, 1<, 81, 1<<,
887, 0<, 826, 1<<, 883, Infinity<, 84, Infinity<<D
19 137
Out[3]= : , >
6 6

The LinearProgramming Function


LinearProgramming is the main function for linear programming with the most flexibility for
specifying the methods used, and is the most efficient for large-scale problems.

The following options are accepted.

option name default value

Method Automatic method used to solve the linear optimiza-


tion problem
Tolerance Automatic convergence tolerance

Options for LinearProgramming.


6 Constrained Optimization

The Method option specifies the algorithm used to solve the linear programming problem.
Possible values are Automatic, "Simplex", "RevisedSimplex", and "InteriorPoint". The
default is Automatic, which automatically chooses from the other methods based on the prob -
lem size and precision.

The Tolerance option specifies the convergence tolerance.

Examples

Difference between Interior Point and Simplex and/or Revised


Simplex
The simplex and revised simplex algorithms solve a linear programming problem by moving
along the edges of the polytope defined by the constraints, from vertices to vertices with succes-
sively smaller values of the objective function, until the minimum is reached. Mathematica's
implementation of these algorithm uses dense linear algebra. A unique feature of the implemen-
tation is that it is possible to solve exact/extended precision problems. Therefore these meth-
ods are suitable for small-sized problems for which non-machine-number results are needed, or
a solution on the vertex is desirable.

Interior point algorithms for linear programming, loosely speaking, iterate from the interior of
the polytope defined by the constraints. They get closer to the solution very quickly, but unlike
the simplex/revised simplex algorithms, do not find the solution exactly. Mathematica's imple-
mentation of an interior point algorithm uses machine precision sparse linear algebra. Therefore
for large-scale machine-precision linear programming problems, the interior point method is
more efficient and should be used.

This solves a linear programming problem that has multiple solutions (any point that lies on the
line segment between 81, 0< and 81, 0< is a solution); the interior point algorithm gives a
solution that lies in the middle of the solution set.
In[6]:= LinearProgramming@8- 1., - 1<, 881., 1.<<, 881., - 1<<, Method Ø "InteriorPoint"D
Out[6]= 80.5, 0.5<

Using Simplex or RevisedSimplex, a solution at the boundary of the solution set is given.
In[7]:= LinearProgramming@8- 1., - 1<, 881., 1.<<, 881., - 1<<, Method Ø "RevisedSimplex"D
Out[7]= 81., 0.<

This shows that interior point method is much faster for the following random sparse linear
programming problem of 200 variables and gives similar optimal value.
Constrained Optimization 7

This shows that interior point method is much faster for the following random sparse linear
programming problem of 200 variables and gives similar optimal value.
In[43]:= m = SparseArray@RandomChoice@80.1, 0.9< Ø 81., 0.<, 850, 200<DD;
xi = LinearProgramming@Range@200D, m, Table@0, 850<D,
Method Ø "InteriorPoint"D; êê Timing
Out[44]= 80.012001, Null<

In[45]:= xs = LinearProgramming@Range@200D, m, Table@0, 850<D,


Method Ø "Simplex"D; êê Timing
Out[45]= 80.576036, Null<

In[46]:= Range@200D.xi - Range@200D.xs


-7
Out[46]= 2.14431 µ 10

Finding Dual Variables


Given the general linear programming problem

Min cT x HPL
s.t. A1 x = b1
A2 x ¥ b2
l § x § u,

its dual is

Max bT y + lT z - uT w HDL
s.t. AT y + z - w = c
y2 ¥ 0, z, w ¥ 0

It is useful to know solutions for both for some applications.

The relationship between the solutions of the primal and dual problems is given by the following
table.

if the primal is then the dual problem is


feasible feasible
unbounded infeasible or unbounded
infeasible unbounded or infeasible
8 Constrained Optimization

When both problems are feasible, then the optimal values of (P) and (D) are the same, and the
following complementary conditions hold for the primal solution x, and dual solution y, z.

HA2 x - b2 LT y2 = 0
Hl - x* LT z* = Hu - x* LT w* = 0

DualLinearProgramming returns a list 8x, y, z, w<.

This solves the primal problem

Min 3 x1 + 4 x2
s.t. x1 + 2 x2 ¥ 5
1 § x1 § 4, 1 § x2 § 4,

as well as the dual problem

Max 5 y1 + z1 + z2 - 4 w1 - 4 w2
s.t. y1 + z1 - w1 = 3
2 y1 + z2 - w2 = 4
y1 , z1 , z2 , w1 , w2 ¥ 0
In[14]:= 8x, y, z, w< = DualLinearProgramming@83, 4<, 881, 2<<, 85<, 881, 4<, 81, 4<<D
Out[14]= 881, 2<, 82<, 81, 0<, 80, 0<<

This confirms that the primal and dual give the same objective value.
In[15]:= 83, 4<.x
Out[15]= 11

In[16]:= 85, 1, 1, - 4, - 4<.Flatten@8y, z, w<D


Out[16]= 11

The dual of the constraint is y = 82.<, which means that for one unit of increase in the right-
hand side of the constraint, there will be 2 units of increase in the objective. This can be con-
firmed by perturbing the right-hand side of the constraint by 0.001.
In[17]:= 8x, y, z, w< = DualLinearProgramming@83, 4<, 881, 2<<, 85 + 0.001<, 881, 4<, 81, 4<<D
Out[17]= 881., 2.0005<, 82.<, 81., 0.<, 80., 0.<<

Indeed the objective value increases by twice that amount.


In[18]:= 83, 4<.x - 11
Out[18]= 0.002

Dealing with Infeasibility and Unboundedness in the Interior


Point Method
Constrained Optimization 9

Dealing with Infeasibility and Unboundedness in the Interior


Point Method
The primal-dual interior point method is designed for feasible problems; for infeasible/un-
bounded problems it will diverge, and with the current implementation, it is difficult to find out
if the divergence is due to infeasibility, or unboundedness.

A heuristic catches infeasible/unbounded problems and issues a suitable message.


In[19]:= LinearProgramming@81., 1<, 881, 1<, 81, 1<<,
881, - 1<, 82, 1<<, Method Ø "InteriorPoint"D
LinearProgramming::lpsnf : No solution can be found that satisfies the constraints. à

Out[19]= LinearProgramming@81., 1<, 881, 1<, 81, 1<<, 881, -1<, 82, 1<<, Method Ø InteriorPointD

Sometimes the heuristic cannot tell with certainty if a problem is infeasible or unbounded.
In[20]:= LinearProgramming@8- 1., - 1.<, 881., 1.<<, 81.<, Method Ø "InteriorPoint"D

LinearProgramming::lpdinf :
The dual of this problem is infeasible, which implies that this problem is either
unbounded or infeasible. Setting the option Method -> Simplex should give a
more definite answer, though large problems may take longer computing time. à
Out[20]= LinearProgramming@8-1., -1.<, 881., 1.<<, 81.<, Method Ø InteriorPointD

Using the Simplex method as suggested by the message shows that the problem is unbounded.
In[21]:= LinearProgramming@8- 1., - 1.<, 881., 1.<<, 81.<, Method Ø "Simplex"D

LinearProgramming::lpsub : This problem is unbounded.

Out[21]= 8Indeterminate, Indeterminate<

The Method Options of "InteriorPoint"


"TreatDenseColumn" is a method option of "InteriorPoint" that decides if dense columns are
to be treated separately. Dense columns are columns of the constraint matrix that have many
nonzero elements. By default, this method option has the value Automatic, and dense columns
are treated separately.

Large problems that contain dense columns typically benefit from dense column treatment.
In[95]:= A = SparseArray@88i_, i_< Ø 1., 8i_, 1< Ø 1.<, 8300, 300<D;
c = Table@1, 8300<D;
b = A.Range@300D;
10 Constrained Optimization

In[98]:= 8x1 = LinearProgramming@c, A, b, Method Ø "InteriorPoint"D; êê Timing,


x2 = LinearProgramming@c, A, b,
Method Ø 8"InteriorPoint", "TreatDenseColumns" Ø False<D; êê Timing<
Out[98]= 880.028001, Null<, 80.200013, Null<<

In[99]:= x1.c - x2.c


-11
Out[99]= 4.97948 µ 10

Importing Large Datasets and Solving Large-Scale


Problems
A commonly used format for documenting linear programming problems is the Mathematical
Programming System (MPS) format. This is a text format consisting of a number of sections.

Importing MPS Formatted Files in Equation Form


Mathematica is able to import MPS formatted files. By default, Import of MPS data returns a
linear programming problem in equation form, which can then be solved using Minimize or
NMinimize.

This solves the linear programming problem specified by MPS file "afiro.mps".
In[25]:= p = Import@"OptimizationêDataêafiro.mps"D
Out[25]= 88-0.4 X02MPS - 0.32 X14MPS - 0.6 X23MPS - 0.48 X36MPS + 10. X39MPS ,
-1. X01MPS + 1. X02MPS + 1. X03MPS ã 0. && -1.06 X01MPS + 1. X04MPS ã 0. && 1. X01MPS § 80. &&
-1. X02MPS + 1.4 X14MPS § 0. && -1. X06MPS - 1. X07MPS - 1. X08MPS - 1. X09MPS + 1. X14MPS + 1. X15MPS ã 0. &&
-1.06 X06MPS - 1.06 X07MPS - 0.96 X08MPS - 0.86 X09MPS + 1. X16MPS ã 0. && 1. X06MPS - 1. X10MPS § 80. &&
1. X07MPS - 1. X11MPS § 0. && 1. X08MPS - 1. X12MPS § 0. && 1. X09MPS - 1. X13MPS § 0. &&
-1. X22MPS + 1. X23MPS + 1. X24MPS + 1. X25MPS ã 0. && -0.43 X22MPS + 1. X26MPS ã 0. && 1. X22MPS § 500. &&
-1. X23MPS + 1.4 X36MPS § 0. && -0.43 X28MPS - 0.43 X29MPS - 0.39 X30MPS - 0.37 X31MPS + 1. X38MPS ã 0. &&
1. X28MPS + 1. X29MPS + 1. X30MPS + 1. X31MPS - 1. X36MPS + 1. X37MPS + 1. X39MPS ã 44. &&
1. X28MPS - 1. X32MPS § 500. && 1. X29MPS - 1. X33MPS § 0. && 1. X30MPS - 1. X34MPS § 0. &&
1. X31MPS - 1. X35MPS § 0. && 2.364 X10MPS + 2.386 X11MPS + 2.408 X12MPS + 2.429 X13MPS - 1. X25MPS +
2.191 X32MPS + 2.219 X33MPS + 2.249 X34MPS + 2.279 X35MPS § 0. && -1. X03MPS + 0.109 X22MPS § 0. &&
-1. X15MPS + 0.109 X28MPS + 0.108 X29MPS + 0.108 X30MPS + 0.107 X31MPS § 0. &&
0.301 X01MPS - 1. X24MPS § 0. && 0.301 X06MPS + 0.313 X07MPS + 0.313 X08MPS + 0.326 X09MPS - 1. X37MPS § 0. &&
1. X04MPS + 1. X26MPS § 310. && 1. X16MPS + 1. X38MPS § 300. && X01MPS ¥ 0 && X02MPS ¥ 0 && X03MPS ¥ 0 &&
X04MPS ¥ 0 && X06MPS ¥ 0 && X07MPS ¥ 0 && X08MPS ¥ 0 && X09MPS ¥ 0 && X10MPS ¥ 0 && X11MPS ¥ 0 &&
X12MPS ¥ 0 && X13MPS ¥ 0 && X14MPS ¥ 0 && X15MPS ¥ 0 && X16MPS ¥ 0 && X22MPS ¥ 0 && X23MPS ¥ 0 &&
X24MPS ¥ 0 && X25MPS ¥ 0 && X26MPS ¥ 0 && X28MPS ¥ 0 && X29MPS ¥ 0 && X30MPS ¥ 0 && X31MPS ¥ 0 &&
X32MPS ¥ 0 && X33MPS ¥ 0 && X34MPS ¥ 0 && X35MPS ¥ 0 && X36MPS ¥ 0 && X37MPS ¥ 0 && X38MPS ¥ 0 && X39MPS ¥ 0<,
8X01MPS , X02MPS , X03MPS , X04MPS , X06MPS , X07MPS , X08MPS , X09MPS , X10MPS , X11MPS , X12MPS ,
X13MPS , X14MPS , X15MPS , X16MPS , X22MPS , X23MPS , X24MPS , X25MPS , X26MPS , X28MPS , X29MPS ,
X30MPS , X31MPS , X32MPS , X33MPS , X34MPS , X35MPS , X36MPS , X37MPS , X38MPS , X39MPS <<

In[26]:= NMinimize üü p
Out[26]= 8-464.753, 8X01MPS Ø 80., X02MPS Ø 25.5, X03MPS Ø 54.5, X04MPS Ø 84.8, X06MPS Ø 18.2143, X07MPS Ø 0.,
X08MPS Ø 0., X09MPS Ø 0., X10MPS Ø 0., X11MPS Ø 0., X12MPS Ø 0., X13MPS Ø 0., X14MPS Ø 18.2143,
X15MPS Ø 0., X16MPS Ø 19.3071, X22MPS Ø 500., X23MPS Ø 475.92, X24MPS Ø 24.08, X25MPS Ø 0.,
X26MPS Ø 215., X28MPS Ø 0., X29MPS Ø 0., X30MPS Ø 0., X31MPS Ø 0., X32MPS Ø 0., X33MPS Ø 0.,
X34MPS Ø 0., X35MPS Ø 0., X36MPS Ø 339.943, X37MPS Ø 383.943, X38MPS Ø 0., X39MPS Ø 0.<<

Large-Scale Problems: Importing in Matrix and Vector Form


Constrained Optimization 11

Large-Scale Problems: Importing in Matrix and Vector Form


For large-scale problems, it is more efficient to import the MPS data file and represent the linear
programming using matrices and vectors, then solve using LinearProgramming.

This shows that for MPS formatted data, the following 3 elements can be imported.
In[101]:= p = Import@"OptimizationêDataêganges.mps", "Elements"D
Out[101]= 8ConstraintMatrix, Equations, LinearProgrammingData<

This imports the problem "ganges", with 1309 constraints and 1681 variables, in a form suit-
able for LinearProgramming.
In[102]:= 8c, A, b, bounds< =
Import@"OptimizationêDataêganges.mps", "LinearProgrammingData"D;

This solves the problem and finds the optimal value.


In[103]:= x = LinearProgramming@c, A, b, boundsD;

In[104]:= c.x
Out[104]= -109 586.

The "ConstraintMatrix" specification can be used to get the sparse constraint matrix only.
In[105]:= p = Import@"OptimizationêDataêganges.mps", "ConstraintMatrix"D
Out[105]= SparseArray@<6912>, 81309, 1681<D

Free Formatted MPS Files


Standard MPS formatted files use a fixed format, where each field occupies a strictly fixed charac -
ter position. However some modeling systems output MPS files with a free format, where fields
are positioned freely. For such files, the option "FreeFormat" -> True can be specified for
Import.

This string describes an MPS file in free format.


In[122]:= txt =
"NAME TESTPROB\nROWS\n N COST\n L CON1\n G CON2\n E CON3 \nCOLUMNS\n x COST
1 CON1 2\n x CON2 3\n y COST 4 CON1 5\n y CON3 6\n Z COST
7 CON2 8\n Z CON3 9\nRHS\n RHS1 CON1 10 CON2 11\n RHS1 CON3
12\nBOUNDS\n UP BND1 x 13\n LO BND1 y 14\n UP BND1 y 15\nENDATA\n";
12 Constrained Optimization

This gets a temporary file name, and exports the string to the file.
In[123]:= file = Close@OpenWrite@DD;
Export@file, txt, "Text"D;

This imports the file, using the "FreeFormat" -> True option.
In[126]:= Import@file, "MPS", "FreeFormat" Ø TrueD
Out[126]= 881. xMPS + 4. yMPS + 7. ZMPS , 2. xMPS + 5. yMPS § 10. && 3. xMPS + 8. ZMPS ¥ 11. && 6. yMPS + 9. ZMPS ã 12. &&
xMPS ¥ 0 && xMPS § 13. && yMPS ¥ 14. && yMPS § 15. && ZMPS ¥ 0<, 8xMPS , yMPS , ZMPS <<

Linear Programming Test Problems


Through the ExampleData function, all NetLib linear programming test problems can be
accessed.

This finds all problems in the Netlib set.


In[12]:= ExampleData@"LinearProgramming"D
Out[12]= 88LinearProgramming, 25fv47<, 8LinearProgramming, 80bau3b<,
8LinearProgramming, adlittle<, 8LinearProgramming, afiro<, 8LinearProgramming, agg<,
8LinearProgramming, agg2<, 8LinearProgramming, agg3<, 8LinearProgramming, bandm<,
8LinearProgramming, beaconfd<, 8LinearProgramming, blend<, 8LinearProgramming, bnl1<,
8LinearProgramming, bnl2<, 8LinearProgramming, boeing1<, 8LinearProgramming, boeing2<,
8LinearProgramming, bore3d<, 8LinearProgramming, brandy<, 8LinearProgramming, capri<,
8LinearProgramming, cre-a<, 8LinearProgramming, cre-b<, 8LinearProgramming, cre-c<,
8LinearProgramming, cre-d<, 8LinearProgramming, cycle<, 8LinearProgramming, czprob<,
8LinearProgramming, d2q06c<, 8LinearProgramming, d6cube<, 8LinearProgramming, degen2<,
8LinearProgramming, degen3<, 8LinearProgramming, dfl001<, 8LinearProgramming, e226<,
8LinearProgramming, etamacro<, 8LinearProgramming, fffff800<, 8LinearProgramming, finnis<,
8LinearProgramming, fit1d<, 8LinearProgramming, fit1p<, 8LinearProgramming, fit2d<,
8LinearProgramming, fit2p<, 8LinearProgramming, forplan<, 8LinearProgramming, ganges<,
8LinearProgramming, gfrd-pnc<, 8LinearProgramming, greenbea<, 8LinearProgramming, greenbeb<,
8LinearProgramming, grow15<, 8LinearProgramming, grow22<, 8LinearProgramming, grow7<,
8LinearProgramming, infeasêbgdbg1<, 8LinearProgramming, infeasêbgetam<,
8LinearProgramming, infeasêbgindy<, 8LinearProgramming, infeasêbgprtr<,
8LinearProgramming, infeasêbox1<, 8LinearProgramming, infeasêceria3d<,
8LinearProgramming, infeasêchemcom<, 8LinearProgramming, infeasêcplex1<,
8LinearProgramming, infeasêcplex2<, 8LinearProgramming, infeasêex72a<,
8LinearProgramming, infeasêex73a<, 8LinearProgramming, infeasêforest6<,
8LinearProgramming, infeasêgalenet<, 8LinearProgramming, infeasêgosh<,
8LinearProgramming, infeasêgran<, 8LinearProgramming, infeasêgreenbea<,
8LinearProgramming, infeasêitest2<, 8LinearProgramming, infeasêitest6<,
8LinearProgramming, infeasêklein1<, 8LinearProgramming, infeasêklein2<,
8LinearProgramming, infeasêklein3<, 8LinearProgramming, infeasêmondou2<,
8LinearProgramming, infeasêpang<, 8LinearProgramming, infeasêpilot4i<,
8LinearProgramming, infeasêqual<, 8LinearProgramming, infeasêreactor<,
8LinearProgramming, infeasêrefinery<, 8LinearProgramming, infeasêvol1<,
8LinearProgramming, infeasêwoodinfe<, 8LinearProgramming, israel<, 8LinearProgramming, kb2<,
8LinearProgramming, ken-07<, 8LinearProgramming, ken-11<, 8LinearProgramming, ken-13<,
8LinearProgramming, ken-18<, 8LinearProgramming, lotfi<, 8LinearProgramming, maros<,
8LinearProgramming, maros-r7<, 8LinearProgramming, modszk1<, 8LinearProgramming, nesm<,
8LinearProgramming, osa-07<, 8LinearProgramming, osa-14<, 8LinearProgramming, osa-30<,
8LinearProgramming, osa-60<, 8LinearProgramming, pds-02<, 8LinearProgramming, pds-06<,
8LinearProgramming, pds-10<, 8LinearProgramming, pds-20<, 8LinearProgramming, perold<,
8LinearProgramming, pilot<, 8LinearProgramming, pilot4<, 8LinearProgramming, pilot87<,
8LinearProgramming, pilot.ja<, 8LinearProgramming, pilotnov<, 8LinearProgramming, pilot.we<,
8LinearProgramming, recipe<, 8LinearProgramming, sc105<, 8LinearProgramming, sc205<,
8LinearProgramming, sc50a<, 8LinearProgramming, sc50b<, 8LinearProgramming, scagr25<,
Constrained Optimization 13

8LinearProgramming, scagr7<, 8LinearProgramming, scfxm1<, 8LinearProgramming, scfxm2<,


8LinearProgramming, scfxm3<, 8LinearProgramming, scorpion<, 8LinearProgramming, scrs8<,
8LinearProgramming, scsd1<, 8LinearProgramming, scsd6<, 8LinearProgramming, scsd8<,
8LinearProgramming, sctap1<, 8LinearProgramming, sctap2<, 8LinearProgramming, sctap3<,
8LinearProgramming, seba<, 8LinearProgramming, share1b<, 8LinearProgramming, share2b<,
8LinearProgramming, shell<, 8LinearProgramming, ship04l<, 8LinearProgramming, ship04s<,
8LinearProgramming, ship08l<, 8LinearProgramming, ship08s<, 8LinearProgramming, ship12l<,
8LinearProgramming, ship12s<, 8LinearProgramming, sierra<, 8LinearProgramming, stair<,
8LinearProgramming, standata<, 8LinearProgramming, standgub<, 8LinearProgramming, standmps<,
8LinearProgramming, stocfor1<, 8LinearProgramming, stocfor2<, 8LinearProgramming, tuff<,
8LinearProgramming, vtp.base<, 8LinearProgramming, wood1p<, 8LinearProgramming, woodw<<

This imports the problem "afiro" and solves it.


In[8]:= ExampleData@8"LinearProgramming", "afiro"<D

Out[8]=

In[9]:= LinearProgramming üü %
Out[9]= 880., 25.5, 54.5, 84.8, 18.2143, 0., 0., 0., 0., 0., 0., 0., 18.2143, 0., 19.3071, 500.,
475.92, 24.08, 0., 215., 0., 0., 0., 0., 0., 0., 0., 0., 339.943, 383.943, 0., 0.<

This shows other properties that can be imported for the "afiro" problem.
In[10]:= ExampleData@8"LinearProgramming", "afiro"<, "Properties"D
Out[10]= 8Collection, ConstraintMatrix, Dimensions, Equations, LinearProgrammingData, Name, Source<

This imports "afiro" in equation form.


In[11]:= ExampleData@8"LinearProgramming", "afiro"<, "Equations"D
Out[11]= 88-0.4 X02MPS - 0.32 X14MPS - 0.6 X23MPS - 0.48 X36MPS + 10. X39MPS ,
-1. X01MPS + 1. X02MPS + 1. X03MPS ã 0. && -1.06 X01MPS + 1. X04MPS ã 0. && 1. X01MPS § 80. &&
-1. X02MPS + 1.4 X14MPS § 0. && -1. X06MPS - 1. X07MPS - 1. X08MPS - 1. X09MPS + 1. X14MPS + 1. X15MPS ã 0. &&
-1.06 X06MPS - 1.06 X07MPS - 0.96 X08MPS - 0.86 X09MPS + 1. X16MPS ã 0. && 1. X06MPS - 1. X10MPS § 80. &&
1. X07MPS - 1. X11MPS § 0. && 1. X08MPS - 1. X12MPS § 0. && 1. X09MPS - 1. X13MPS § 0. &&
-1. X22MPS + 1. X23MPS + 1. X24MPS + 1. X25MPS ã 0. && -0.43 X22MPS + 1. X26MPS ã 0. && 1. X22MPS § 500. &&
-1. X23MPS + 1.4 X36MPS § 0. && -0.43 X28MPS - 0.43 X29MPS - 0.39 X30MPS - 0.37 X31MPS + 1. X38MPS ã 0. &&
1. X28MPS + 1. X29MPS + 1. X30MPS + 1. X31MPS - 1. X36MPS + 1. X37MPS + 1. X39MPS ã 44. &&
1. X28MPS - 1. X32MPS § 500. && 1. X29MPS - 1. X33MPS § 0. && 1. X30MPS - 1. X34MPS § 0. &&
1. X31MPS - 1. X35MPS § 0. && 2.364 X10MPS + 2.386 X11MPS + 2.408 X12MPS + 2.429 X13MPS - 1. X25MPS +
2.191 X32MPS + 2.219 X33MPS + 2.249 X34MPS + 2.279 X35MPS § 0. && -1. X03MPS + 0.109 X22MPS § 0. &&
-1. X15MPS + 0.109 X28MPS + 0.108 X29MPS + 0.108 X30MPS + 0.107 X31MPS § 0. &&
0.301 X01MPS - 1. X24MPS § 0. && 0.301 X06MPS + 0.313 X07MPS + 0.313 X08MPS + 0.326 X09MPS - 1. X37MPS § 0. &&
1. X04MPS + 1. X26MPS § 310. && 1. X16MPS + 1. X38MPS § 300. && X01MPS ¥ 0 && X02MPS ¥ 0 && X03MPS ¥ 0 &&
X04MPS ¥ 0 && X06MPS ¥ 0 && X07MPS ¥ 0 && X08MPS ¥ 0 && X09MPS ¥ 0 && X10MPS ¥ 0 && X11MPS ¥ 0 &&
X12MPS ¥ 0 && X13MPS ¥ 0 && X14MPS ¥ 0 && X15MPS ¥ 0 && X16MPS ¥ 0 && X22MPS ¥ 0 && X23MPS ¥ 0 &&
X24MPS ¥ 0 && X25MPS ¥ 0 && X26MPS ¥ 0 && X28MPS ¥ 0 && X29MPS ¥ 0 && X30MPS ¥ 0 && X31MPS ¥ 0 &&
X32MPS ¥ 0 && X33MPS ¥ 0 && X34MPS ¥ 0 && X35MPS ¥ 0 && X36MPS ¥ 0 && X37MPS ¥ 0 && X38MPS ¥ 0 && X39MPS ¥ 0<,
8X01MPS , X02MPS , X03MPS , X04MPS , X06MPS , X07MPS , X08MPS , X09MPS , X10MPS , X11MPS , X12MPS ,
X13MPS , X14MPS , X15MPS , X16MPS , X22MPS , X23MPS , X24MPS , X25MPS , X26MPS , X28MPS , X29MPS ,
X30MPS , X31MPS , X32MPS , X33MPS , X34MPS , X35MPS , X36MPS , X37MPS , X38MPS , X39MPS <<

Application Examples of Linear Programming


14 Constrained Optimization

Application Examples of Linear Programming

L1-Norm Minimization
It is possible to solve an l1 minimization problem

Min Ax-b 1

by turning the system into a linear programming problem

Min zT e
z¥Ax-b
z ¥ -A x + b

This defines a function for solving an l1 minimization problem.


In[35]:= L1Minimization@A_, b_D := Module@
8B, c, All, ball, x, lb, AT <,
8m, n< = Dimensions@AD;
AT = Transpose@AD;
B = SparseArray@88i_, i_< Ø 1<, 8m, m<D;
Aall = Join@Transpose@Join@B, - ATDD, Transpose@Join@B, ATDDD;
ball = Join@- b, bD;
c = Join@Table@1, 8m<D, Table@0, 8n<DD;
lb = Table@- Infinity, 8m + n<D;
x = LinearProgramming@c, Aall, ball, lbD;
x = Drop@x, mD
D

The following is an over-determined linear system.

1 2 3 1
4 5 5 2
x =
7 8 9 3
10 11 12 4

A simple application of LinearSolve would fail.


In[36]:= A = SparseArray@881, 2, 3<, 85, 6, 7<, 87, 8, 9<, 810, 11, 12<<D;
b = 81, 2, 3, 4<;
LinearSolve@A, bD
LinearSolve::nosol : Linear equation encountered that has no solution. à

Out[38]= LinearSolve@SparseArray@<12>, 84, 3<D, 81, 2, 3, 4<D


Constrained Optimization 15

This finds the l1 minimization solution.


In[39]:= x = L1Minimization@A, bD
1
Out[39]= :0, 0, >
3

In[40]:= 8Norm@A.x - b, 1D, Norm@A.x - b, 2D< êê N


Out[40]= 80.333333, 0.333333<

The least squares solution can be found using PseudoInverse . This gives a large l1 norm, but
a smaller l2 norm.
In[41]:= x2 = PseudoInverse@AD.b
4 58 112
Out[41]= : , , >
513 513 513

In[42]:= 8Norm@A.x2 - b, 1D, Norm@A.x2 - b, 2D< êê N


Out[42]= 80.491228, 0.286132<

Design of an Optimal Anchor


The example is adopted from [2]. The aim is to design an anchor that uses as little material as
possible to support a load.

Wall Anchor

Load

This problem can be modeled by discretizing and simulating it using nodes and links. The model-
ing process is illustrated using the following figure. Here a grid of 7×10 nodes is generated.
Each node is then connected by a link to all other nodes that are of Manhattan distance of less
than or equal to three. The three red nodes are assumed to be fixed to the wall, while on all
other nodes, compression and tension forces must balance.
16 Constrained Optimization

Each link represents a rigid rod that has a thickness, with its weight proportional to the force on
it and its length. The aim is to minimize the total material used, which is

Material needed to construct a link = force * link_length

subject to force balance on each node except the fixed ones.

Hence mathematically this is a linearly constrained minimization problem, with objective func-
tion a sum of absolute values of linear functions.

Minimize ‚ force * link_length

subject to force balance on every unanchored node.

The absolute values force * link_length in the objective function can be replaced by breaking
down force into a combination of compression and tension forces, with each non-negative.
Thus assume E is the set of links, V the set of nodes, lij the length of link between nodes i and

j, cij and tij the compression and tension forces on the link; then the above model can be

converted to a linear programming problem

Minimize ‚ Icij + tij M lij


8i, j<œ E

subject to ‚ H tik - cik L = loadi , tij , cij ¥ 0, for all i œ V and 8i, j< œ E.
8i,k<œ E

The following sets up the model, solves it, and plots the result; it is based on an AMPL model
[2].
Constrained Optimization 17

The following sets up the model, solves it, and plots the result; it is based on an AMPL model
[2].
In[1]:= OptimalAnchorDesign@X_, Y_, ANCHORS_, forcepoints_, dist_: 3D :=
Module@8a, c, ldist, p, NODES, UNANCHORED, setx, sety, length, xload, yload,
nnodes, getarcs, ARCS, comp, comps, tensions, const1, const2, lengths, volume,
inedges, outedges, nodebalance, const3, vars, totalf, maxf, res, tens,
setInOutEdges, consts, sol, f, xii, yii, xjj, yjj, t, rhs, ma, obj, m, n<,
Clear@comp, tensions, tens, varsD;

H* need at least 2 nchor points *L


If@Length@Union@ANCHORSDD ã 1, Return@8<DD;

H* A lattice of Nodes *L
NODES = Partition@Flatten@Outer@List, X, YDD, 2D;

H* these are the nodes near the wall that will be anchored *L
UNANCHORED = Complement@NODES, ANCHORSD;
H* the many linked exist in the structure that we try to optimize away *L
setx@8x_, y_<D := Hxload@x, yD = 0L;
sety@8x_, y_<D := Hyload@x, yD = 0L;
Map@setx, UNANCHOREDD;
Map@sety, UNANCHOREDD;
Map@Hyload@Ò@@1DD, Ò@@2DDD = - 1L &, forcepointsD;

H* get the edges that link nodes with neighbors of distance § 3 *L


nnodes = Length@NODESD;
getarcs =
Compile@88NODES, _Integer, 2<<, Module@8xi, yi, xj, yj, i, j, nn = 0, NN<,
H* we use a two sweep strategy as a nexted list
would not be allowed to compile by Compile *L
Do@Do@8xi, yi< = NODES@@iDD;
8xj, yj< = NODES@@jDD;
If@Abs@xj - xiD § dist && Abs@yj - yiD § dist &&
Abs@GCD@xj - xi, yj - yiDD ã 1 && Hxi > xj »» Hxi ã xj && yi > yjLL, nn ++D,
8j, Length@NODESD<D, 8i, Length@NODESD<D;
NN = Table@81, 1, 1, 1<, 8nn<D;
nn = 1;
Do@Do@8xi, yi< = NODES@@iDD;
8xj, yj< = NODES@@jDD;
If@Abs@xj - xiD § dist && Abs@yj - yiD § dist &&
Abs@GCD@xj - xi, yj - yiDD ã 1 && Hxi > xj »» Hxi ã xj && yi > yjLL,
NN@@nn ++DD = 8xi, yi, xj, yj<D, 8j, Length@NODESD<D, 8i, Length@NODESD<D;
NNDD;
ARCS = Partition@Flatten@getarcs@NODESDD, 84<D;
length@8xi_, yi_, xj_, yj_<D := Sqrt@Hxj - xiL ^ 2 + Hyj - yiL ^ 2D êê N;
H* the variables: compression and tension forces *L
comps = Map@Hcomp üü ÒL &, ARCSD;
tensions = Map@Htens üü ÒL &, ARCSD;
const1 = Thread@Greater@comps, 0DD;
const2 = Thread@Greater@tensions, 0DD;
lengths = Map@Hlength@ÒDL &, ARCSD êê N;

H* objective function *L
volume = lengths.Hcomps + tensionsL;

Map@Hinedges@ÒD = FalseL &, NODESD;


Map@Houtedges@ÒD = FalseL &, NODESD;
setInOutEdges@8xi_, yi_, xj_, yj_<D := Module@8<,
If@outedges@8xj, yj<D === False, outedges@8xj, yj<D = 8xi, yi, xj, yj<,
outedges@8xj, yj<D = 8outedges@8xj, yj<D, 8xi, yi, xj, yj<<D;
If@inedges@8xi, yi<D === False, inedges@8xi, yi<D = 8xi, yi, xj, yj<,
18 Constrained Optimization

inedges@8xi, yi<D = 8inedges@8xi, yi<D, 8xi, yi, xj, yj<<D;D;


Map@HsetInOutEdges@ÒDL &, ARCSD;
Map@Hinedges@ÒD = Partition@Flatten@8inedges@ÒD<D, 84<DL &, NODESD;
Map@Houtedges@ÒD = Partition@Flatten@8outedges@ÒD<D, 84<DL &, NODESD;

nodebalance@8x_, y_<D :=
Module@8Inedges, Outedges, xforce, yforce<, Inedges = inedges@8x, y<D;
Outedges = outedges@8x, y<D;
xforce@8xi_, yi_, xj_, yj_<D := HHxj - xiL ê length@8xi, yi, xj, yj<DL *
Hcomp@xi, yi, xj, yjD - tens@xi, yi, xj, yjDL;
yforce@8xi_, yi_, xj_, yj_<D := HHyj - yiL ê length@8xi, yi, xj, yj<DL *
Hcomp@xi, yi, xj, yjD - tens@xi, yi, xj, yjDL;
H* constraints *L
8Total@Map@xforce, InedgesDD - Total@Map@xforce, OutedgesDD ã xload@x, yD,
Total@Map@yforce, InedgesDD - Total@Map@yforce, OutedgesDD ã yload@x, yD<
D;
const3 = Flatten@Map@nodebalance@ÒD &, UNANCHOREDDD;
H* assemble the variables and constraints, and solve *L

vars = Union@Flatten@8comps, tensions<DD;


8rhs, ma< = CoefficientArrays@const3, varsD;
obj = CoefficientArrays@volume, varsD@@2DD;
8m, n< = Dimensions@maD;
Print@"Number of variables = ", n, " number of constraints = ", mD;

H* solve *L
t = Timing@sol = LinearProgramming@obj, ma,
Transpose@8- rhs, Table@0, 8m<D<D, Table@80, Infinity<, 8n<DD;D;
Print@"CPU time = ", t@@1DD, " Seconds"D;
Map@Set üü Ò &, Transpose@8vars, sol<DD;

H* Now add up the total force on all links,


and scale them to be between 0 and 1. *L
maxf = Max@comps + tensionsD;
Evaluate@Map@totalf@ÒD &, ARCSDD = Hcomps + tensionsL ê maxf;

H* Now we plot the links that has a force at least 0.001 and
get the optimal design of the anchor. We color code the drawing
so that red means a large force and blue a small one. Also,
links with large forces are drawn thinker than those with small forces. *L

res = 8EdgeForm@BlackD, White,


Polygon@880, 0<, 80, Length@YD<, 81, Length@YD<, 81, 0<<D,
Map@H8xii, yii, xjj, yjj< = Ò; f = totalf@8xii, yii, xjj, yjj<D;
If@f > 0.001, 8Hue@.7 * H1 - fLD, Thickness@.02 Sqrt@fDD,
Line@88xii, yii<, 8xjj, yjj<<D<, 8<DL &, ARCSD, GrayLevel@.5D,
PointSize@0.04D, 8Black, Map@8Arrow@8Ò, Ò + 80, - 4<<D< &, forcepointsD<,
Map@Point, ANCHORSD<;
Graphics@resD
D;
Constrained Optimization 19

This solves the problem by placing 30 nodes in the horizontal and vertical directions.
In[2]:= m = 30;H* y direction. *L
n = 30;H* x direction. *L
X = Table@i, 8i, 0, n<D;
Y = Table@i, 8i, 0, m<D;
res = OptimalAnchorDesign@X, Y,
Table@81, i<, 8i, Round@m ê 3D, Round@m ê 3 * 2D<D, 88n, m ê 2<<, 3D
Number of variables = 27 496 number of constraints = 1900
CPU time = 4.8123 Seconds

Out[6]=

If, however, the anchor is fixed not on the wall, but on some points in space, notice how the
results resemble the shape of some leaves. Perhaps the structure of leaves is optimized in the
process of evolution.
In[7]:= m = 40;H*must be even*L
n = 40;
X = Table@i, 8i, 0, n<D;
Y = Table@i, 8i, 0, m<D;
res = OptimalAnchorDesign@X, Y,
Table@8Round@n ê 3D, i<, 8i, Round@m ê 2D - 1, Round@m ê 2D + 1<D, 88n, m ê 2<<, 3D
Number of variables = 49 456 number of constraints = 3356
CPU time = 9.83262 Seconds

Out[11]=
20 Constrained Optimization

Algorithms for Linear Programming

Simplex and Revised Simplex Algorithms


The simplex and revised simplex algorithms solve linear programming problems by constructing
a feasible solution at a vertex of the polytope defined by the constraints, and then moving
along the edges of the polytope to vertices with successively smaller values of the objective
function until the minimum is reached.

Although the sparse implementation of simplex and revised algorithms are quite efficient in
practice, and are guaranteed to find the global optimum, they have a poor worst-case behavior:
it is possible to construct a linear programming problem for which the simplex or revised
simplex method takes a number of steps exponential in the problem size.

Mathematica implements simplex and revised simplex algorithms using dense linear algebra.
The unique feature of this implementation is that it is possible to solve exact/extended precision
problems. Therefore these methods are more suitable for small-sized problems for which non-
machine number results are needed.

This sets up a random linear programming problem with 20 constraints and 200 variables.
In[12]:= SeedRandom@123D;
8m, n< = 820, 200<;
c = Table@RandomInteger@81, 10<D, 8n<D;
A = Table@RandomInteger@8- 100, 100<D, 8m<, 8n<D;
b = A.Table@1, 8n<D;
bounds = Table@8- 10, 10<, 8n<D;

This solves the problem. Typically, for a linear programming problem with many more variables
than constraints, the revised simplex algorithm is faster. On the other hand, if there are many
more constraints than variables, the simplex algorithm is faster.
In[25]:= t = Timing@x = LinearProgramming@c, A, b, bounds, Method Ø "Simplex"D;D;
Print@"time = ", t@@1DD, " optimal value = ", c.x, " or ", N@c.xDD

time = 14.7409 optimal value =


1 151 274 037 058 983 869 972 777 363
- or -10 935.
105 283 309 229 356 027 027 010
Constrained Optimization 21

In[26]:= t = Timing@x = LinearProgramming@c, A, b, bounds, Method Ø "RevisedSimplex"D;D;


Print@"time = ", t@@1DD, " optimal value = ", c.x, " or ", N@c.xDD

time = 6.3444 optimal value =


1 151 274 037 058 983 869 972 777 363
- or -10 935.
105 283 309 229 356 027 027 010

If only machine-number results are desired, then the problem should be converted to machine
numbers, and the interior point algorithm should be used.
In[20]:= t = Timing@
x = LinearProgramming@N@cD, N@AD, N@bD, N@boundsD, Method Ø "InteriorPoint"D;D;
Print@"time = ", t, " optimal value = ", c.xD
time = 80.036002, Null< optimal value = -10 935.

Interior Point Algorithm


Although the simplex and revised simplex algorithms can be quite efficient on average, they
have a poor worst-case behavior. It is possible to construct a linear programming problem for
which the simplex or revised simplex methods take a number of steps exponential in the prob-
lem size. The interior point algorithm, however, has been proven to converge in a number of
steps that are polynomial in the problem size.

Furthermore, the Mathematica simplex and revised simplex implementation use dense linear
algebra, while its interior point implementation uses machine-number sparse linear algebra.
Therefore for large-scale, machine-number linear programming problems, the interior point
method is more efficient and should be used.

Interior Point Formulation


Consider the standardized linear programming problem

Min cT x, s.t. A x = b, x ¥ 0,

where c, x œ Rn , A œ Rmµn , b œ Rm . This problem can be solved using a barrier function formulation
to deal with the positive constraints

n
Min cT x - t ‚ln Hxi L, s.t. A x = b, x ¥ 0, t > 0, t Ø 0
i=1

The first-order necessary condition for the above problem gives

c - t X -1 e = AT y, and A x = b, x ¥ 0

Let X denote the diagonal matrix made of the vector x, and z = t X -1 e.


22 Constrained Optimization

Let X denote the diagonal matrix made of the vector x, and z = t X -1 e.

xz = te
AT y + z = c
Ax = b
x, z ¥ 0

This is a set of 2 m + n linear/nonlinear equations with constraints. It can be solved using New-
ton's method

Hx, y, zL := Hx, y, zL + HDx, Dy, DzL

with

X Z 0 Dz te - xz
I 0 A T Dx = c - AT y - z .
0 A 0 Dy b - Ax

One way to solve this linear system is to use Gaussian elimination to simplify the matrix into
block triangular form.

X Z 0 X Z 0 X Z 0
-1
I 0 A T Ø 0 X Z A -1 T Ø 0 X Z AT
-1
0 A 0 0 A 0 0 0 AZ X AT

To solve this block triangular matrix, the so-called normal system can be solved, with the
matrix in this normal system

B = A Z -1 X AT

This matrix is positive definite, but becomes very ill-conditioned as the solution is approached.
Thus numerical techniques are used to stabilize the solution process, and typically the interior
Constrained Optimization 23

point method can only be expected to solve the problem to a tolerance of about

$MachineEpsilon , with tolerance explained in "Convergence Tolerance". Mathematica uses

Mehrotra's predictor-corrector scheme [1].

Convergence Tolerance
General Linear Programming problems are first converted to the standard form

Min cT x
subject to A x = b
x ¥ 0

with the corresponding dual

Max bT y
subject to A T y + z = c
z¥ 0

The convergence criterion for the interior point algorithm is

»» b - A x »» »» c - AT y - z »» »» cT x - bT y »»
+ + § tolerance
maxH1, »» b »»L maxH1, »» c »»L maxI1, »» cT x »», »» bT y »»M

with the tolerance set, by default, to $MachineEpsilon .

References
[1] Vanderbei, R. Linear Programming: Foundations and Extensions. Springer-Verlag, 2001.

[2] Mehrotra, S. "On the Implementation of a Primal-Dual Interior Point Method." SIAM Journal
on Optimization 2 (1992): 575|601.
24 Constrained Optimization

Numerical Nonlinear Local Optimization

Introduction
Numerical algorithms for constrained nonlinear optimization can be broadly categorized into
gradient-based methods and direct search methods. Gradient search methods use first deriva-
tives (gradients) or second derivatives (Hessians) information. Examples are the sequential
quadratic programming (SQP) method, the augmented Lagrangian method, and the (nonlinear)
interior point method. Direct search methods do not use derivative information. Examples are
Nelder|Mead, genetic algorithm and differential evolution, and simulated annealing. Direct
search methods tend to converge more slowly, but can be more tolerant to the presence of
noise in the function and constraints.

Typically, algorithms only build up a local model of the problems. Furthermore, to ensure conver -
gence of the iterative process, many such algorithms insist on a certain decrease of the objec-
tive function or of a merit function which is a combination of the objective and constraints. Such
algorithms will, if convergent, only find the local optimum, and are called local optimization
algorithms. In Mathematica local optimization problems can be solved using FindMinimum .

Global optimization algorithms, on the other hand, attempt to find the global optimum, typically
by allowing decrease as well as increase of the objective/merit function. Such algorithms are
usually computationally more expensive. Global optimization problems can be solved exactly
using Minimize or numerically using NMinimize.

This solves a nonlinear programming problem,

Min x - y
s.t - 3 x2 + 2 x y - y2 ¥ -1

using Minimize , which gives an exact solution.


In[1]:= MinimizeA9x - y, - 3 x2 + 2 x y - y2 ¥ - 1=, 8x, y<E
Out[1]= 8-1, 8x Ø 0, y Ø 1<<
Constrained Optimization 25

This solves the same problem numerically. NMinimize returns a machine-number solution.

In[2]:= NMinimizeA9x - y, - 3 x2 + 2 x y - y2 ¥ - 1=, 8x, y<E


-17
Out[2]= 9-1., 9x Ø -3.57514 µ 10 , y Ø 1.==

FindMinimum numerically finds a local minimum. In this example the local minimum found is
also a global minimum.
In[3]:= FindMinimumA9x - y, - 3 x2 + 2 x y - y2 ¥ - 1=, 8x, y<E
-17
Out[3]= 9-1., 9x Ø 2.78301 µ 10 , y Ø 1.==

The FindMinimum Function


FindMinimum solves local unconstrained and constrained optimization problems. This document
only covers the constrained optimization case. See "Unconstrained Optimization" for details of
FindMinimum for unconstrained optimization.

This solves a nonlinear programming problem,


100 200
Min - -
Hx-1L2 +Hy-1L2 +1 Hx+1L2 +Hy+2L2 +1

s.t x 2 + y2 > 3

using FindMinimum .
100 200
In[4]:= FindMinimumB:- - , x2 + y 2 > 3 >, 8x, y<F
2 2
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2

Out[4]= 8-207.16, 8x Ø -0.994861, y Ø -1.99229<<

This provides FindMinimum with a starting value of 2 for x, but uses the default starting point
for y.
100 200
In[5]:= FindMinimumB:- - , x2 + y 2 > 3 >, 88x, 2<, y<F
2 2
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2

Out[5]= 8-103.063, 8x Ø 1.23037, y Ø 1.21909<<

The previous solution point is actually a local minimum. FindMinimum only attempts to find a
local minimum.
26 Constrained Optimization

This contour plot of the feasible region illustrates the local and global minima.
100 200
In[6]:= ContourPlotB- -
, 8x, - 3, 2<,
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2 2 2

8y, - 3, 2<, RegionFunction Ø HÒ1 ^ 2 + Ò2 ^ 2 > 3 &L, Contours Ø 10,


Epilog Ø H8Red, PointSize@.02D, Text@"global minimum", 8- .995, - 2.092<D,
Point@8- .995, - 1.992<D, Text@"local minimum", 80.5304, 1.2191<D,
Point@81.2304, 1.2191<D<L, ContourLabels Ø TrueF
2 -40
-20
-60
-80
-100
local minimum
1

-60
0
-40

Out[6]=

-1
-60
-80-100
-180 -140
-200
-2 -100
global minimum -80
-120
-160 -60 -40

-3 -40
-3 -2 -1 0 1 2

This is a 3D visualization of the function in its feasible region.


100 200
In[21]:= ShowB:Plot3DB- -
, 8x, - 4, 3<,
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2 2 2

8y, - 4, 3<, RegionFunction Ø HÒ1 ^ 2 + Ò2 ^ 2 > 3 &L, PlotRange Ø AllF,


Graphics3D@8Red, PointSize@.02D, Text@"Global minimum", 8- .995, - 2.092, - 230<D,
Point@8- .995, - 2.092, - 207<D, Text@"Local minimum", 80.5304, 1.2191, - 93.4<D,
Point@81.23, 1.22, - 103.<D<D>F

Out[21]=
Constrained Optimization 27

Options for FindMinimum


FindMinimum accepts these options.

option name default value

AccuracyGoal Automatic the accuracy sought

Compiled Automatic whether the function and constraints


should automatically be compiled
EvaluationMonitor Automatic expression to evaluate whenever f is
evaluated
Gradient Automatic the list of gradient functions
8D@ f , xD, D@ f , yD, …<
MaxIterations Automatic maximum number of iterations to use

Method Automatic method to use

PrecisionGoal Automatic the precision sought

StepMonitor None expression to evaluate whenever a step is


taken
WorkingPrecision Automatic the precision used in internal computations

The Method option specifies the method to use to solve the optimization problem. Currently, the
only method available for constrained optimization is the interior point algorithm.

This specifies that the interior point method should be used.

In[8]:= FindMinimumA9x2 + y2 , Hx - 1L2 + 2 Hy - 1L2 > 5=, 8x, y<, Method Ø "InteriorPoint"E
Out[8]= 80.149239, 8x Ø -0.150959, y Ø -0.355599<<

MaxIterations specifies the maximum number of iterations that should be used. When
machine precision is used for constrained optimization, the default MaxIterations -> 500 is
used.

When StepMonitor is specified, it is evaluated once every iterative step in the interior point
algorithm. On the other hand, EvaluationMonitor, when specified, is evaluated every time a
function or an equality or inequality constraint is evaluated.
28 Constrained Optimization

This demonstrates that 19 iterations are not sufficient to solve the following problem to the
default tolerance. It collects points visited through the use of StepMonitor .
In[9]:= pts =
100 200
ReapBsol = FindMinimumB:- , x2 + y 2 > 3 >,
-
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2 2 2

88x, 1.5<, 8y, - 1<<, MaxIterations Ø 19, StepMonitor ß HSow@8x, y<DLF;F; sol

FindMinimum::eit : The algorithm does not converge to the tolerance of 4.806217383937354`*^-6 in 19


iterations. The best estimated solution, with 8feasibility residual, KKT residual, complementary
residual< of 90.000305478, 0.0173304, 1.1484 µ 10-12 =, is returned. à
Out[9]= 8-207.16, 8x Ø -0.994818, y Ø -1.9923<<

The points visited are shown using ContourPlot . The starting point is blue, the rest yellow.
100 200
In[10]:= ContourPlotB- -
, 8x, - 3, 3<,
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2 2 2

8y, - 4, 2<, RegionFunction Ø HÒ1 ^ 2 + Ò2 ^ 2 > 3 &L, Contours Ø 10,


Epilog Ø H8Red, PointSize@.01D, Line@pts@@2, 1DDD, Yellow, Point êü pts@@2, 1DD,
Blue, PointSize@.02D, Point@pts@@2, 1, 1DDD<L, ContourLabels Ø TrueF
2 -40 -60
-80
-100
1 -20

0
-40

Out[10]= -1

-180 -140
-200 -40
-2
-120
-160
-100
-3 -60 -80

-40

-4 -20
-3 -2 -1 0 1 2 3

WorkingPrecision -> prec specifies that all the calculation in FindMinimum is to be carried out
at precision prec. By default, prec = MachinePrecision. If prec > MachinePrecision, a fixed
precision of prec is used through the computation.

AccuracyGoal and PrecisionGoal options are used in the following way. By default,
AccuracyGoal -> Automatic, and is set to prec ê 3. By default, PrecisionGoal -> Automatic
and is set to - Infinity. AccuracyGoal -> ga is the same as
AccuracyGoal -> 8- Infinity, ga<.

Suppose AccuracyGoal -> 8a, ga< and PrecisionGoal -> p, then FindMinimum attempts to
drive the residual, which is a combination of the feasibility and the satisfaction of the Karush|
Kuhn|Tucker (KKT) and complementary conditions, to be less than or equal to tol = 10-ga . In
Constrained Optimization 29

Suppose AccuracyGoal -> 8a, ga< and PrecisionGoal -> p, then FindMinimum attempts to
drive the residual, which is a combination of the feasibility and the satisfaction of the Karush|
Kuhn|Tucker (KKT) and complementary conditions, to be less than or equal to tol = 10-ga . In
addition, it requires the difference between the current and next iterative point, x and x+ , to
satisfy »» x+ - x »» <= 10-a + 10-p »» x »», before terminating.

This computes a solution using a WorkingPrecision of 100.


100 200
In[11]:= sol = FindMinimumB:- - , x2 + y 2 > 3 >,
2 2
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2

8x, y<, WorkingPrecision Ø 100F


Out[11]= 8-207.1598969820087285017593316900341920050300050695900831345837005214162585155897084005034822Ö
593961079, 8x Ø
-0.9948613347360094014956553845944468031990304363229825717098561180647581982908158877161292Ö
969329515966, y Ø
-1.9922920021040141022434830768916702049447785592615484931630228240356715336019034943007530Ö
03273288575<<

The exact optimal value is computed using Minimize , and compared with the result of
FindMinimum .
In[12]:= solExact =
100 200
MinimizeB:- - , x2 + y 2 > 3 >, 8x, y<F;
2 2
Hx - 1L + Hy - 1L + 1 Hx + 1L + Hy + 2L2 + 1
2

In[13]:= sol@@1DD - solExact@@1DD


-71
Out[13]= 8.58739616875135385265051020 µ 10

Examples of FindMinimum

Finding a Global Minimum


If a global minimum is needed, NMinimize or Minimize should be used. However since each
run of FindMinimum tends to be faster than NMinimize or Minimize, sometimes it may be more
efficient to use FindMinimum , particularly for relatively large problems with a few local minima.
FindMinimum attempts to find a local minimum, therefore it will terminate if a local minimum is
found.
30 Constrained Optimization

This shows a function with multiple minima within the feasible region of - 10 § x § 10.
In[14]:= Plot@Sin@xD + .5 x, 8x, - 10, 10<D

Out[14]=
-10 -5 5 10

-2

-4

With the automatic starting point, FindMinimum converges to a local minimum.


In[15]:= FindMinimum@8Sin@xD + .5 x, - 10 <= x <= 10<, 8x<D
Out[15]= 8-1.91322, 8x Ø -2.0944<<

If the user has some knowledge of the problem, a better starting point can be given to
FindMinimum .
In[16]:= FindMinimum@8Sin@xD + .5 x, - 10 <= x <= 10<, 88x, - 5<<D
Out[16]= 8-5.05482, 8x Ø -8.37758<<

Alternatively, the user can tighten the constraints.


In[17]:= FindMinimum@8Sin@xD + .5 x, - 10 <= x <= 10 && x < - 5<, 8x<D
Out[17]= 8-5.05482, 8x Ø -8.37758<<

Finally, multiple starting points can be used and the best resulting minimum selected.
In[18]:= SeedRandom@7919D;
Table@
FindMinimum@8Sin@xD + .5 x, - 10 <= x <= 10<, 88x, RandomReal@8- 10, 10<D<<D, 810<D
Out[19]= 88-1.91322, 8x Ø -2.09439<<, 8-5.05482, 8x Ø -8.37758<<, 8-5.05482, 8x Ø -8.37758<<,
8-5.05482, 8x Ø -8.37758<<, 8-1.91322, 8x Ø -2.0944<<, 8-5.05482, 8x Ø -8.37758<<,
81.22837, 8x Ø 4.18879<<, 81.22837, 8x Ø 4.18879<<, 81.22837, 8x Ø 4.18879<<, 84.45598, 8x Ø 10.<<<

Multiple starting points can also be done more systematically via NMinimize, using the
"RandomSearch" method with an interior point as the post-processor.
In[1]:= NMinimize@8Sin@xD + .5 x, - 10 <= x <= 10<, 8x<,
Method Ø 8"RandomSearch", "PostProcess" Ø "InteriorPoint"<D
Out[1]= 8-5.05482, 8x Ø -8.37758<<
Constrained Optimization 31

Solving Minimax Problems


The minimax (also known as minmax) problem is that of finding the minimum value of a func-
tion defined as the maximum of several functions, that is,

Min Maxi fiœ81,2,…,m< HxL


s.t gHxL ¥ 0, hHxL = 0

While this problem can often be solved using general constrained optimization technique, it is
more reliably solved by reformulating the problem into one with smooth objective function.
Specifically, the minimax problem can be converted into the following

Min z
s.t z ¥ fi HxL, i œ 81, 2, …, m<, gHxL ¥ 0, hHxL = 0

and solved using either FindMinimum or NMinimize.

This defines a function FindMinMax.


In[9]:= H*FindMinMax@8Max@8f1,f2,..<D,constraints<,varsD*L
SetAttributes@FindMinMax, HoldAllD;
FindMinMax@8f_Max, cons_<, vars_, opts___ ? OptionQD :=
With@8res = iFindMinMax@8f, cons<, vars, optsD<, res ê; ListQ@resDD;
iFindMinMax@8ff_Max, cons_<, vars_, opts___ ? OptionQD :=
Module@8z, res, f = List üü ff<,
res = FindMinimum@8z, HAnd üü consL && HAnd üü Thread@z >= fDL<,
Append@Flatten@8vars<, 1D, zD, optsD;
If@ListQ@resD, 8z ê. res@@2DD, Thread@vars -> Hvars ê. res@@2DDLD<DD;

This solves an unconstrained minimax problem with one variable.


In[19]:= FindMinMax@8Max@8x ^ 2, Hx - 1L ^ 2<D, 8<<, 8x, y<D
Out[19]= 80.25, 8x Ø 0.5, y Ø 1.<<

This solves an unconstrained minimax problem with two variables.


In[12]:= FindMinMax@8Max@8Abs@2 x ^ 2 + y ^ 2 - 48 x - 40 y + 304D, Abs@- x ^ 2 - 3 y ^ 2D,
Abs@x + 3 y - 18D, Abs@- x - yD, Abs@ x + y - 8D<D, 8<<, 8x, y<D
Out[12]= 837.2356, 8x Ø 4.92563, y Ø 2.07956<<
32 Constrained Optimization

This shows the contour of the objective function, and the optimal solution.
In[14]:= ContourPlot@Max@8Abs@2 x ^ 2 + y ^ 2 - 48 x - 40 y + 304D, Abs@- x ^ 2 - 3 y ^ 2D,
Abs@x + 3 y - 18D, Abs@- x - yD, Abs@ x + y - 8D<D, 8x, 3, 7<, 8y, 1, 3<,
Contours Ø 40, Epilog Ø 8Red, PointSize@0.02D, Point@84.93, 2.08<D<D

Out[14]=

This solves a constrained minimax problem.


In[16]:= FindMinMax@
8Max@8Abs@2 x ^ 2 + y ^ 2 - 48 x - 40 y + 304D, Abs@- x ^ 2 - 3 y ^ 2D, Abs@x + 3 y - 18D,
Abs@- x - yD, Abs@ x + y - 8D<D, 8Hx - 6L ^ 2 + Hy - 1L ^ 2 § 1<<, 8x, y<D
Out[16]= 837.7192, 8x Ø 5.34014, y Ø 1.75139<<

This shows the contour of the objective function within the feasible region, and the optimal
solution.
In[18]:= ContourPlot@Max@8Abs@2 x ^ 2 + y ^ 2 - 48 x - 40 y + 304D,
Abs@- x ^ 2 - 3 y ^ 2D, Abs@x + 3 y - 18D, Abs@- x - yD, Abs@ x + y - 8D<D,
8x, 3, 7<, 8y, 0, 3<, RegionFunction Ø HHHÒ1 - 6L ^ 2 + HÒ2 - 1L ^ 2 <= 1L &L,
Contours Ø 40, Epilog Ø 8Red, PointSize@0.02D, Point@85.34, 1.75<D<D

Out[18]=

Multiobjective Optimization: Goal Programming


Constrained Optimization 33

Multiobjective Optimization: Goal Programming


Multiobjective programming involves minimizing several objective functions, subject to con-
straints. Since a solution that minimizes one function often does not minimize the others at the
same time, there is usually no unique optimal solution.

Sometimes the decision maker has in mind a goal for each objective. In that case the so-called
goal programming technique can be applied.

There are a number of variants of how to model a goal-programming problem. One variant is to
order the objective functions based on priority, and seek to minimize the deviation of the most
important objective function from its goal first, before attempting to minimize the deviations of
the less important objective functions from their goals. This is called lexicographic or preemp-
tive goal programming.

In the second variant, the weighted sum of the deviation is minimized. Specifically, the follow-
ing constrained minimization problem is to be solved.

+ + +
Minx w1 I f1 HxL - goal1 M + w2 I f2 HxL - goal2 M + … + wm I fm HxL - goalm M
s.t gHxL ¥ 0, hHxL = 0

Here a+ stands for the positive part of the real number a. The weights wi reflect the relative
importance, and normalize the deviation to take into account the relative scales and units.
Possible values for the weights are the inverse of the goals to be attained. The previous prob-
lem can be reformulated to one that is easier to solve.

Min w1 z1 + w2 z2 + … + wm zm
s.t z1 ¥ f1 HxL - goal1 , z2 ¥ f2 HxL - goal2 , …, zm ¥ fm HxL - goalm , z1 , z2 , …, zm ¥ 0
gHxL ¥ 0, hHxL = 0

The third variant, Chebyshev goal programming, minimizes the maximum deviation, rather
than the sum of the deviations. This balances the deviation of different objective functions.
Specifically, the following constrained minimization problem is to be solved.

Min Maxi wi I fi HxL - goali M


s.t gHxL ¥ 0, hHxL = 0
34 Constrained Optimization

This can be reformulated as

Min z
s.t z ¥ wi I fi HxL - goali M, i = 1, 2, …, m
gHxL ¥ 0, hHxL = 0

This defines a function GoalProgrammingWeightedAverage that solves the goal program-


ming model by minimizing the weighted sum of the deviation.
H* GoalProgrammingWeightedAverage@888f1,goal1,weight1<,...<,cons<,varsDD*L
GoalProgrammingWeightedAverage@
8fg : 88_, _< ..<, cons_<, vars_, opts___ ? OptionQD := With@
8res = Catch@iGoalProgrammingWeightedAverage@8Map@HAppend üü Ò &L,
Thread@8fg, ConstantArray@1, 8Length@fgD<D<DD, cons<, varsDD<,
res ê; ListQ@resD
D;
GoalProgrammingWeightedAverage@
8fg : 88_, _, _< ..<, cons_<, vars_, opts___ ? OptionQD := With@
8res = Catch@iGoalProgrammingWeightedAverage@8fg, cons<, varsDD<,
res ê; ListQ@resD
D;
iGoalProgrammingWeightedAverage@
8fg : 88_, _, _< ..<, cons_<, vars_, opts___ ? OptionQD := Module@
8fs, goals, zs, z, res, ws<,
8fs, goals, ws< = Transpose@fgD;
If@! VectorQ@ws, HÒ >= 0 &LD, Throw@$FailedDD;
If@! VectorQ@goals, HHNumericQ@ÒD && Head@ÒD =!= ComplexL &LD, Throw@$FailedDD;
zs = Array@z, Length@fsDD;
res = FindMinimum@8ws.zs, HAnd üü Flatten@8cons<, 1DL && HAnd üü Thread@zs ¥ 0DL &&
HAnd üü Thread@zs ¥ fs - goals DL<, Join@Flatten@8vars<, 1D, zsD, optsD;
If@ListQ@resD, 8fs ê. res@@2DD, Thread@vars Ø Hvars ê. res@@2DDLD<D
D;

This defines a function GoalProgrammingChebyshev that solves the goal programming model
by minimizing the maximum deviation.
H* syntax GoalAttainment@888f1,goal1,weight1<,...<,cons<,varsDD*L
GoalProgrammingChebyshev@
8fg : 88_, _< ..<, cons_<, vars_, opts___ ? OptionQD := With@
8res = Catch@iGoalProgrammingChebyshev@8Map@HAppend üü Ò &L,
Thread@8fg, ConstantArray@1, 8Length@fgD<D<DD, cons<, varsDD<,
res ê; ListQ@resD
D;
GoalProgrammingChebyshev@
8fg : 88_, _, _< ..<, cons_<, vars_, opts___ ? OptionQD := With@
8res = Catch@iGoalProgrammingChebyshev@8fg, cons<, varsDD<,
res ê; ListQ@resD
D;
iGoalProgrammingChebyshev@
8fg : 88_, _, _< ..<, cons_<, vars_, opts___ ? OptionQD := Module@
8fs, goals, y, res, ws<,
8fs, goals, ws< = Transpose@fgD;
If@! VectorQ@ws, HÒ >= 0 &LD, Throw@$FailedDD;
If@! VectorQ@goals, HHNumericQ@ÒD && Head@ÒD =!= ComplexL &LD, Throw@$FailedDD;
res = FindMinimum@
8y, HAnd üü Flatten@8cons<, 1DL && HAnd üü Thread@y ¥ ws * Hfs - goalsL DL<,
Append@Flatten@8vars<, 1D, yD, optsD;
If@ListQ@resD, 8fs ê. res@@2DD, Thread@vars Ø Hvars ê. res@@2DDLD<D
D;

This solves a goal programming problem with two objective functions and one constraint using
GoalProgrammingWeightedAverage with unit weighting, resulting in deviations from the
goal of 13.12 and 33.28, thus a total deviation of 37, and a maximal deviation of 33.28.
Constrained Optimization 35

This solves a goal programming problem with two objective functions and one constraint using
GoalProgrammingWeightedAverage with unit weighting, resulting in deviations from the
goal of 13.12 and 33.28, thus a total deviation of 37, and a maximal deviation of 33.28.
res1 = GoalProgrammingWeightedAverage@
888x ^ 2 + y ^ 2, 0<, 84 Hx - 2L ^ 2 + 4 Hy - 2L ^ 2, 0<<, y - x ã - 4<, 8x, y<D
8813.12, 33.28<, 8x Ø 3.6, y Ø -0.4<<

This solves a goal programming problem with two objective functions and one constraint using
GoalProgrammingChebyshev with unit weighting, resulting in deviations from the goal of 16
and 32, thus a maximal deviation of 32, but a total deviation of 38.
res2 = GoalProgrammingChebyshev@
888x ^ 2 + y ^ 2, 0<, 84 Hx - 2L ^ 2 + 4 Hy - 2L ^ 2, 0<<, y - x ã - 4<, 8x, y<D
9816., 32.<, 9x Ø 4., y Ø -4.55071 µ 10-9 ==

This shows the contours for the first (blue) and second (red) objective functions, the feasible
region (the black line), and the optimal solution found by
GoalProgrammingWeightedAverage (yellow point) and by GoalProgrammingChebyshev
(green point).
g1 = ContourPlot@x ^ 2 + y ^ 2, 8x, 2, 6<, 8y, - 1, 2<,
ContourShading Ø False, ContourStyle Ø Blue, ContourLabels Ø AutomaticD;
g2 = ContourPlot@4 Hx - 2L ^ 2 + 4 Hy - 2L ^ 2, 8x, 2, 6<, 8y, - 1, 2<,
ContourShading Ø False, ContourStyle Ø Red, ContourLabels Ø AutomaticD;
Show@8g1, g2<, Epilog Ø 8Line@883, - 1<, 86, 2<<D, PointSize@0.02D, Yellow,
Point@8x, y< ê. res1@@2DDD, Green, Point@8x, y< ê. res2@@2DDD<D

2.0 10 15 20 25 35 60

20

1.5

1.0

10

0.5

0.0
80

-0.5

30
50 90
40
-1.0 5 70 30
2 3 4 5 6
36 Constrained Optimization

An Application Example: Portfolio Optimization


A powerful tool in managing investments is to spread the risk by investing in assets that have
few or no correlations. For example, if asset A goes up 20% one year and is down 10% the
next, asset B goes down 10% one year and is up 20% the next, and up years for A are down
years for B, then holding both in equal amounts would result in a 10% increase every year,
without any risk. In reality such assets are rarely available, but the concept remains a useful
one.

In this example, the aim is to find the optimal asset allocation so as to minimize the risk, and
achieve a preset level of return, by investing in a spread of stocks, bonds, and gold.

Here are the historical returns of various assets between 1973 and 1994. For example, in 1973,
S&P 500 lost 1 - 0.852 = 14.8 %, while gold appreciated by 67.7%.

"3m Tbill" "long Tbond" "SP500" "Wilt.5000" "Corp. Bond" "NASDQ" "EAFE" "Gold"
1973 1.075 0.942 0.852 0.815 0.698 1.023 0.851 1.677
1974 1.084 1.02 0.735 0.716 0.662 1.002 0.768 1.722
1975 1.061 1.056 1.371 1.385 1.318 0.123 1.354 0.76
1976 1.052 1.175 1.236 1.266 1.28 1.156 1.025 0.96
1977 1.055 1.002 0.926 0.974 1.093 1.03 1.181 1.2
1978 1.077 0.982 1.064 1.093 1.146 1.012 1.326 1.295
1979 1.109 0.978 1.184 1.256 1.307 1.023 1.048 2.212
1980 1.127 0.947 1.323 1.337 1.367 1.031 1.226 1.296
1981 1.156 1.003 0.949 0.963 0.99 1.073 0.977 0.688
1982 1.117 1.465 1.215 1.187 1.213 1.311 0.981 1.084
1983 1.092 0.985 1.224 1.235 1.217 1.08 1.237 0.872
1984 1.103 1.159 1.061 1.03 0.903 1.15 1.074 0.825
1985 1.08 1.366 1.316 1.326 1.333 1.213 1.562 1.006
1986 1.063 1.309 1.186 1.161 1.086 1.156 1.694 1.216
1987 1.061 0.925 1.052 1.023 0.959 1.023 1.246 1.244
1988 1.071 1.086 1.165 1.179 1.165 1.076 1.283 0.861
1989 1.087 1.212 1.316 1.292 1.204 1.142 1.105 0.977
1990 1.08 1.054 0.968 0.938 0.83 1.083 0.766 0.922
1991 1.057 1.193 1.304 1.342 1.594 1.161 1.121 0.958
1992 1.036 1.079 1.076 1.09 1.174 1.076 0.878 0.926
1993 1.031 1.217 1.1 1.113 1.162 1.11 1.326 1.146
1994 1.045 0.889 1.012 0.999 0.968 0.965 1.078 0.99
average 1.078 1.093 1.120 1.124 1.121 1.046 1.141 1.130

This is the annual return data.


Constrained Optimization 37

This is the annual return data.


In[2]:= R = 881.075`, 1.084`, 1.061`, 1.052`, 1.055`, 1.077`,
1.109`, 1.127`, 1.156`, 1.117`, 1.092`, 1.103`, 1.08`, 1.063`,
1.061`, 1.071`, 1.087`, 1.08`, 1.057`, 1.036`, 1.031`, 1.045`<,
80.942`, 1.02`, 1.056`, 1.175`, 1.002`, 0.982`, 0.978`, 0.947`,
1.003`, 1.465`, 0.985`, 1.159`, 1.366`, 1.309`, 0.925`,
1.086`, 1.212`, 1.054`, 1.193`, 1.079`, 1.217`, 0.889`<,
80.852`, 0.735`, 1.371`, 1.236`, 0.926`, 1.064`, 1.184`, 1.323`, 0.949`,
1.215`, 1.224`, 1.061`, 1.316`, 1.186`, 1.052`, 1.165`, 1.316`,
0.968`, 1.304`, 1.076`, 1.1`, 1.012`<, 80.815`, 0.716`, 1.385`, 1.266`,
0.974`, 1.093`, 1.256`, 1.337`, 0.963`, 1.187`, 1.235`, 1.03`, 1.326`,
1.161`, 1.023`, 1.179`, 1.292`, 0.938`, 1.342`, 1.09`, 1.113`, 0.999`<,
80.698`, 0.662`, 1.318`, 1.28`, 1.093`, 1.146`, 1.307`, 1.367`, 0.99`,
1.213`, 1.217`, 0.903`, 1.333`, 1.086`, 0.959`, 1.165`, 1.204`, 0.83`,
1.594`, 1.174`, 1.162`, 0.968`<, 81.023`, 1.002`, 0.123`, 1.156`,
1.03`, 1.012`, 1.023`, 1.031`, 1.073`, 1.311`, 1.08`, 1.15`, 1.213`,
1.156`, 1.023`, 1.076`, 1.142`, 1.083`, 1.161`, 1.076`, 1.11`, 0.965`<,
80.851`, 0.768`, 1.354`, 1.025`, 1.181`, 1.326`, 1.048`, 1.226`, 0.977`,
0.981`, 1.237`, 1.074`, 1.562`, 1.694`, 1.246`, 1.283`, 1.105`, 0.766`,
1.121`, 0.878`, 1.326`, 1.078`<, 81.677`, 1.722`, 0.76`, 0.96`, 1.2`,
1.295`, 2.212`, 1.296`, 0.688`, 1.084`, 0.872`, 0.825`, 1.006`, 1.216`,
1.244`, 0.861`, 0.977`, 0.922`, 0.958`, 0.926`, 1.146`, 0.99`<<;

Here are the expected returns over this 22-year period for the eight assets.
In[3]:= 8n, nyear< = Dimensions@RD;

In[5]:= ER = Mean@Transpose ü RD
Out[5]= 81.07814, 1.09291, 1.11977, 1.12364, 1.12132, 1.04632, 1.14123, 1.12895<

Here is the covariant matrix, which measures how the assets correlate to each other.
In[11]:= Covariants = Covariance@Transpose@RDD;

This finds the optimal asset allocation by minimizing the standard deviation of an allocation,
subject to the constraints that the total allocation is 100% (Total@varsD == 1), the expected
return is over 12% (vars.ER ¥ 1.12), and the variables must be non-negative, thus each asset is
allocated a non-negative percentage (thus no shorting). The resulting optimal asset allocation
suggests 15.5% in 3-month treasury bills, 20.3% in gold, and the rest in stocks, with a result-
ing standard deviation of 0.0126.
In[18]:= vars = Map@Subscript@x, ÒD &, 8"3m T-bill", "long T-bond", "SP500",
"Wiltshire 5000", "Corporate Bond", "NASDQ", "EAFE", "Gold"<D;
vars = Map@Subscript@x, ÒD &, 8"3m T-bill", "long T-bond", "SP500",
"Wiltshire 5000", "Corporate Bond", "NASDQ", "EAFE", "Gold"<D;
FindMinimum@8
vars.Covariants.vars,
Total@varsD ã 1 && vars.ER ¥ 1.12 && Apply@And, Thread@Greater@vars, 0DDD<, varsD
Out[20]= 80.0126235, 8x3m T-bill Ø 0.154632, xlong T-bond Ø 0.0195645, xSP500 Ø 0.354434, xWiltshire 5000 Ø 0.0238249,
xCorporate Bond Ø 0.000133775, xNASDQ Ø 0.0000309191, xEAFE Ø 0.24396, xGold Ø 0.203419<<
38 Constrained Optimization

This trades less return for smaller volatility by asking for an expected return of 10%. Now we
have 55.5% in 3-month treasury bills, 10.3% in gold, and the rest in stocks.
In[16]:= vars = Map@Subscript@x, ÒD &, 8"3m T-bill", "long T-bond", "SP500",
"Wiltshire 5000", "Corporate Bond", "NASDQ", "EAFE", "Gold"<D;
FindMinimum@8
vars.Covariants.vars,
Total@varsD ã 1 && vars.ER ¥ 1.10 && Apply@And, Thread@Greater@vars, 0DDD<, varsD
Out[17]= 80.00365995, 8x3m T-bill Ø 0.555172, xlong T-bond Ø 0.0244205, xSP500 Ø 0.156701, xWiltshire 5000 Ø 0.0223812,
xCorporate Bond Ø 0.00017454, xNASDQ Ø 0.0000293021, xEAFE Ø 0.13859, xGold Ø 0.102532<<

Limitations of the Interior Point Method


The implementation of the interior point method in FindMinimum requires first and second
derivatives of the objective and constraints. Symbolic derivatives are first attempted, and if
they fail, finite difference will be used to calculate the derivatives. If the function or constraints
are not smooth, particularly if the first derivative at the optimal point is not continuous, the
interior point method may experience difficulty in converging.

This shows that the interior point method has difficulty in minimizing this nonsmooth function.
In[29]:= FindMinimum@8Abs@x - 3D, 0 § x § 5<, 8x<D

FindMinimum::eit : The algorithm does not converge to the tolerance of 4.806217383937354`*^-6 in 500
iterations. The best estimated solution, with 8feasibility residual, KKT residual, complementary
residual< of 94.54827 µ 10-6 , 0.0402467, 2.27414 µ 10-6 =, is returned. à
-6
Out[29]= 98.71759 µ 10 , 8x Ø 2.99999<=

This is somewhat similar to the difficulty experienced by an unconstrained Newton's method.


In[30]:= FindMinimum@8Abs@x - 3D<, 8x<, Method Ø NewtonD

FindMinimum::lstol :
The line search decreased the step size to within tolerance specified by AccuracyGoal and
PrecisionGoal but was unable to find a sufficient decrease
in the function. You may need more than MachinePrecision
digits of working precision to meet these tolerances. à
-6
Out[30]= 98.06359 µ 10 , 8x Ø 2.99999<=
Constrained Optimization 39

Numerical Algorithms for Constrained Local


Optimization

The Interior Point Algorithm


The interior point algorithm solves a constrained optimization by combining constraints and the
objective function through the use of the barrier function. Specifically, the general constrained
optimization problem is first converted to the standard form

Min f HxL
(3)
s.t.hHxL = 0, x ¥ 0.

The non-negative constraints are then replaced by adding a barrier term to the objective
function

Min y m HxL := f HxL - m ‚ lnHxi L


i
s.t.hHxL = 0,

where m > 0 is a barrier parameter.

The necessary KKT condition (assuming, for example, that the gradient of h is linearly indepen-
dent) is

“ y m HxL - yT AHxL = 0
hHxL = 0,

where A HxL = H“ h1 HxL, “ h2 HxL, …, “ hm HxLLT is of dimension m×n. Or

gHxL - mX-1 e - yT AHxL = 0


hHxL = 0.

Here X is a diagonal matrix, with the diagonal element i of xi if i œ I, or 0. Introducing dual


variables z = m X -1 e, then

gHxL - z - yT AHxL = 0
hHxL = 0 (4)
Z X e = m e.

This nonlinear system can be solved with Newton's method. Let LHx, yL = f HxL - hHxLT y and

HHx, yL = “2 LHx, yL = “2 f HxL - ⁄m i=1 yi “2 hi HxL; the Jacobi matrix of the above system (4) is
40 Constrained Optimization

This nonlinear system can be solved with Newton's method. Let LHx, yL = f HxL - hHxLT y and

HHx, yL = “2 LHx, yL = “2 f HxL - ⁄m i=1 yi “2 hi HxL; the Jacobi matrix of the above system (4) is

HHx, yL -AHxLT -I dx gHxL - z - yT AHxL dy


-AHxL 0 0 dy =- -hHxL = - -dh .
Z 0 X dz Z Xe- me dx z

Eliminating dz, dz = -X -1 HZ d x + dx z L, then IHHx, yL + X -1 ZM dx - AHxLT dy = -dy - X -1 dx z , thus

HHx, yL + X -1 Z -AHxLT dx dy + X -1 dx z gHxL - AHxLT y - m X -1 e


=- =- . (5)
-AHxL 0 dy -dh -hHxL

Thus the nonlinear constrained problem can be solved iteratively by

x := x + d x, y := y + d y, z := z + d z (6)

with the search direction 8d x, d y, d z< given by solving the previous Jacobi system (5).

To ensure convergence, you need to have some measure of success. One way of doing this is to
use a merit function, such as the following augmented Langrangian merit function.

Augmented Langrangian Merit Function


This defines an augmented Langrangian merit function

fHx, bL = f HxL - m ⁄i lnHxi L - h HxLT l + b »» hHxL »»2 . (7)

Here m > 0 is the barrier parameter and b > 0 a penalty parameter. It can be proved that if the

matrix N Hx, yL = H Hx, yL + X -1 Z is positive definite, then either the search direction given by (6) is

a decent direction for the above merit function (7), or 8x, y, z, m< satisfied the KKT condition (4).

A line search is performed along the search direction, with the initial step length chosen to be
as close to 1 as possible, while maintaining the positive constraints. A backtracking procedure is
then used until the Armijo condition is satisfied on the merit function,
fHx + t d x, bL § f Hx, bL + g t “ f Hx, bL d x with g œ H0, 1 ê 2D.
T
Constrained Optimization 41

Convergence Tolerance
The convergence criterion for the interior point algorithm is

»» gHxL - z - yT AHxL »» + »» hHxL »» + »» Z X e - m e »» § tol

with tol set, by default, to 10-MachinePrecision ê3 .

Numerical Nonlinear Global Optimization

Introduction
Numerical algorithms for constrained nonlinear optimization can be broadly categorized into
gradient-based methods and direct search methods. Gradient-based methods use first deriva-
tives (gradients) or second derivatives (Hessians). Examples are the sequential quadratic pro-
gramming (SQP) method, the augmented Lagrangian method, and the (nonlinear) interior point
method. Direct search methods do not use derivative information. Examples are Nelder|Mead,
genetic algorithm and differential evolution, and simulated annealing. Direct search methods
tend to converge more slowly, but can be more tolerant to the presence of noise in the function
and constraints.

Typically, algorithms only build up a local model of the problems. Furthermore, many such
algorithms insist on certain decrease of the objective function, or decrease of a merit function
which is a combination of the objective and constraints, to ensure convergence of the iterative
process. Such algorithms will, if convergent, only find local optima, and are called local optimiza-
tion algorithms. In Mathematica local optimization problems can be solved using FindMinimum .

Global optimization algorithms, on the other hand, attempt to find the global optimum, typically
by allowing decrease as well as increase of the objective/merit function. Such algorithms are
usually computationally more expensive. Global optimization problems can be solved exactly
using Minimize or numerically using NMinimize.

This solves a nonlinear programming problem,

Min x - y
s.t. - 3 x2 + 2 x y - y2 ¥ -1
42 Constrained Optimization

using Minimize,which gives an exact solution.

In[1]:= MinimizeA9x - y, - 3 x2 + 2 x y - y2 ¥ - 1=, 8x, y<E


Out[1]= 8-1, 8x Ø 0, y Ø 1<<

This solves the same problem numerically. NMinimize returns a machine-number solution.

In[2]:= NMinimizeA9x - y, - 3 x2 + 2 x y - y2 ¥ - 1=, 8x, y<E


-6
Out[2]= 9-1., 9x Ø 1.90701 µ 10 , y Ø 1.==

FindMinimum numerically finds a local minimum. In this example the local minimum found is
also a global minimum.
In[3]:= FindMinimumA9x - y, - 3 x2 + 2 x y - y2 ¥ - 1=, 8x, y<E
-17
Out[3]= 9-1., 9x Ø 2.78301 µ 10 , y Ø 1.==

The NMinimize Function


NMinimize and NMaximize implement several algorithms for finding constrained global optima.
The methods are flexible enough to cope with functions that are not differentiable or continuous
and are not easily trapped by local optima.

Finding a global optimum can be arbitrarily difficult, even without constraints, and so the meth-
ods used may fail. It may frequently be useful to optimize the function several times with
different starting conditions and take the best of the results.

This finds the maximum of sinHx + yL - x2 - y2 .


In[46]:= NMaximizeASin@x + yD - x2 - y2 , 8x, y<E
Out[46]= 80.400489, 8x Ø 0.369543, y Ø 0.369543<<

1 2
This finds the minimum of Jy - N + x2 subject to the constraints y ¥ 0 and y ¥ x + 1.
2

In[47]:= NMinimizeA9x2 + Hy - .5L2 , y ¥ 0 && y ¥ x + 1=, 8x, y<E


Out[47]= 80.125, 8x Ø -0.25, y Ø 0.75<<

The constraints to NMinimize and NMaximize may be either a list or a logical combination of
equalities, inequalities, and domain specifications. Equalities and inequalities may be nonlinear.

Element, for example,


Element@x, IntegersD or x œ Integers. Variables must be either integers or real numbers, and
will be assumed to be real numbers unless specified otherwise. Constraints are generally
The constraints to NMinimize and NMaximize may be either a list or a logical combination of
Constrained Optimization 43

Any strong inequalities will be converted to weak inequalities due to the limits of working with
approximate numbers. Specify a domain for a variable using Element, for example,
Element@x, IntegersD or x œ Integers. Variables must be either integers or real numbers, and
will be assumed to be real numbers unless specified otherwise. Constraints are generally
enforced by adding penalties when points leave the feasible region.

Constraints can contain logical operators like And, Or , and so on.

In[3]:= NMinimizeA9x2 + y2 , x ¥ 1 »» y ¥ 2=, 8x, y<E


Out[3]= 81., 8x Ø 1., y Ø 0.<<

Here x is restricted to being an integer.

In[4]:= NMinimizeA9Hx - 1 ê 3L2 + Hy - 1 ê 3L2 , x œ Integers=, 8x, y<E


Out[4]= 80.111111, 8x Ø 0, y Ø 0.333333<<

In order for NMinimize to work, it needs a rectangular initial region in which to start. This is
similar to giving other numerical methods a starting point or starting points. The initial region is
specified by giving each variable a finite upper and lower bound. This is done by including
a § x § b in the constraints, or 8x, a, b< in the variables. If both are given, the bounds in the
variables are used for the initial region, and the constraints are just used as constraints. If no
initial region is specified for a variable x, the default initial region of -1 § x § 1 is used. Different
variables can have initial regions defined in different ways.

Here the initial region is taken from the variables. The problem is unconstrained.

In[5]:= NMinimizeAx2 , 88x, 3, 4<<E


Out[5]= 80., 8x Ø 0.<<

Here the initial region is taken from the constraints.

In[6]:= NMinimizeA9x2 , 3 § x § 4=, 8x<E


Out[6]= 89., 8x Ø 3.<<

Here the initial region for x is taken from the constraints, the initial region for y is taken from
the variables, and the initial region for z is taken to be the default. The problem is uncon-
strained in y and z, but not x.
In[7]:= NMinimizeA9x2 + y2 + z2 , 3 § x § 4=, 8x, 8y, 2, 5<, z<E
Out[7]= 89., 8x Ø 3., y Ø 0., z Ø 0.<<

2
The polynomial 4 x4 - 4 x2 + 1 has global minima at x Ø ± . NelderMead finds one of the
2
minima.
44 Constrained Optimization

2
The polynomial 4 x4 - 4 x2 + 1 has global minima at x Ø ± . NelderMead finds one of the
2
minima.
In[48]:= NMinimizeA4 x4 - 4 x2 + 1, x, Method -> "NelderMead"E
Out[48]= 80., 8x Ø 0.707107<<

The other minimum can be found by using a different RandomSeed.

In[50]:= NMinimizeA4 x4 - 4 x2 + 1, x, Method Ø 8"NelderMead", "RandomSeed" Ø 111<E


Out[50]= 80., 8x Ø -0.707107<<

NMinimize and NMaximize have several optimization methods available: Automatic,


"DifferentialEvolution", "NelderMead", "RandomSearch", and "SimulatedAnnealing". The
optimization method is controlled by the Method option, which either takes the method as a
string, or takes a list whose first element is the method as a string and whose remaining ele-
ments are method-specific options. All method-specific option, left-hand sides should also be
given as strings.

The following function has a large number of local minima.


In[51]:= Clear@fD;
f=
1
‰Sin@50 xD + Sin@60 ‰y D + Sin@70 Sin@xDD + Sin@Sin@80 yDD - Sin@10 Hx + yLD + Ix2 + y2 M;
4
Plot3D@f, 8x, - 1, 1<, 8y, - 1, 1<, PlotPoints Ø 50, Mesh Ø FalseD

Out[53]=

Use RandomSearch to find a minimum.


In[54]:= NMinimize@f, 8x, y<, Method Ø "RandomSearch"D
Out[54]= 8-2.85149, 8x Ø 0.449094, y Ø 0.291443<<
Constrained Optimization 45

Use RandomSearch with more starting points to find the global minimum.
In[55]:= NMinimize@f, 8x, y<, Method Ø 8"RandomSearch", "SearchPoints" Ø 250<D
Out[55]= 8-3.30687, 8x Ø -0.0244031, y Ø 0.210612<<

With the default method, NMinimize picks which method to use based on the type of problem.
If the objective function and constraints are linear, LinearProgramming is used. If there are
integer variables, or if the head of the objective function is not a numeric function, differential
evolution is used. For everything else, it uses Nelder-Mead, but if Nelder-Mead does poorly, it
switches to differential evolution.

Because the methods used by NMinimize may not improve every iteration, convergence is only
checked after several iterations have occurred.

Numerical Algorithms for Constrained Global


Optimization

Nelder|Mead
The Nelder|Mead method is a direct search method. For a function of n variables, the algorithm
maintains a set of n + 1 points forming the vertices of a polytope in n-dimensional space. This
method is often termed the "simplex" method, which should not be confused with the well-
known simplex method for linear programming.

At each iteration, n + 1 points x1 , x2 , …, xn+1 form a polytope. The points are ordered so that
f Hx1 L § f Hx2 L § … § f Hxn+1 L. A new point is then generated to replace the worst point xn+1 .

1
Let c be the centroid of the polytope consisting of the best n points, c = n
⁄i=1 xi . A trial point xt is
n

generated by reflecting the worst point through the centroid, xt = c + a Hc - xn+1 L, where a > 0 is a
parameter.

If the new point xt is neither a new worst point nor a new best point, f Hx1 L § f Hxt L § f Hxn L, xt
replaces xn+1 .

If the new point xt is better than the best point, f Hxt L < f Hx1 L, the reflection is very successful and
can be carried out further to xe = c + b Hxt - rL, where b > 1 is a parameter to expand the polytope.
If the expansion is successful, f Hxe L < f Hxt L, xe replaces xn+1 ; otherwise the expansion failed, and xt
replaces xn+1 .
46 Constrained Optimization

If the new point xt is better than the best point, f Hxt L < f Hx1 L, the reflection is very successful and
can be carried out further to xe = c + b Hxt - rL, where b > 1 is a parameter to expand the polytope.
If the expansion is successful, f Hxe L < f Hxt L, xe replaces xn+1 ; otherwise the expansion failed, and xt
replaces xn+1 .

If the new point xt is worse than the second worst point, f Hxt L ¥ f Hxn L, the polytope is assumed to
be too large and needs to be contracted. A new trial point is defined as

c + g Hxn+1 - cL, if f Hxt L ¥ f Hxn+1 L,


xc =
c + g Hxt - cL, if f Hxt L < f Hxn+1 L,

where 0 < g < 1 is a parameter. If f Hxc L < MinH f Hxn+1 L, f Hxt LL, the contraction is successful, and xc
replaces xn+1 . Otherwise a further contraction is carried out.

The process is assumed to have converged if the difference between the best function values in
the new and old polytope, as well as the distance between the new best point and the old best
point, are less than the tolerances provided by AccuracyGoal and PrecisionGoal.

Strictly speaking, Nelder|Mead is not a true global optimization algorithm; however, in practice
it tends to work reasonably well for problems that do not have many local minima.

option name default value


"ContractRatio" 0.5 ratio used for contraction
"ExpandRatio" 2.0 ratio used for expansion
"InitialPoints" Automatic set of initial points
"PenaltyFunction" Automatic function applied to constraints to penalize
invalid points
"PostProcess" Automatic whether to post-process using local search
methods
"RandomSeed" 0 starting value for the random number
generator
"ReflectRatio" 1.0 ratio used for reflection
"ShrinkRatio" 0.5 ratio used for shrinking
"Tolerance" 0.001 tolerance for accepting constraint violations

NelderMead specific options.


Constrained Optimization 47

Here the function inside the unit disk is minimized using NelderMead.
2
In[82]:= NMinimizeB:100 Iy - x2 M + H1 - xL2 , x2 + y2 § 1>, 8x, y<, Method Ø "NelderMead"F
Out[82]= 80.0456748, 8x Ø 0.786415, y Ø 0.617698<<

Here is a function with several local minima that are all different depths.
In[83]:= Clear@a, fD;
a = Reverse êü Distribute@88- 32, - 16, 0, 16, 32<, 8- 32, - 16, 0, 16, 32<<, ListD;
f = 1 ê H0.002 + Plus üü MapIndexed@1 ê HÒ2P1T + Plus üü HH8x, y< - Ò1L ^ 6LL &, aDL;
Plot3D@f, 8x, - 50, 50<, 8y, - 50, 50<, Mesh Ø None, PlotPoints Ø 25D

Out[83]=

With the default parameters, NelderMead is too easily trapped in a local minimum.
In[116]:= Do@Print@NMinimize@f, 88x, - 50, 50<, 8y, - 50, 50<<,
Method Ø 8"NelderMead", "RandomSeed" Ø i<DD, 8i, 5<D
83.96825, 8x Ø 15.9816, y Ø -31.9608<<

912.6705, 9x Ø 0.02779, y Ø 1.57394 µ 10-6 ==

810.7632, 8x Ø -31.9412, y Ø 0.0253465<<


81.99203, 8x Ø -15.9864, y Ø -31.9703<<
816.4409, 8x Ø -15.9634, y Ø 15.9634<<

By using settings that are more aggressive and less likely to make the simplex smaller, the
results are better.
In[117]:= Do@Print@NMinimize@f, 88x, - 50, 50<, 8y, - 50, 50<<,
Method Ø 8"NelderMead", "ShrinkRatio" Ø 0.95, "ContractRatio" Ø 0.95,
"ReflectRatio" Ø 2, "RandomSeed" Ø i<DD, 8i, 5<D
83.96825, 8x Ø 15.9816, y Ø -31.9608<<
82.98211, 8x Ø -0.0132362, y Ø -31.9651<<
81.99203, 8x Ø -15.9864, y Ø -31.9703<<
816.4409, 8x Ø -15.9634, y Ø 15.9634<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
48 Constrained Optimization

Differential Evolution
Differential evolution is a simple stochastic function minimizer.

The algorithm maintains a population of m points, 9x1 , x2 , …, x j , …, xm =, where typically m p n, with

n being the number of variables.

During each iteration of the algorithm, a new population of m points is generated. The jth new
point is generated by picking three random points, xu , xv and xw , from the old population, and
forming xs = xw + sHxu - xv L, where s is a real scaling factor. Then a new point xnew is constructed

from x j and xs by taking the ith coordinate from xs with probability r and otherwise taking the

coordinate from x j . If f Hxnew L < f Ix j M, then xnew replaces x j in the population. The probability r is

controlled by the "CrossProbability" option.

The process is assumed to have converged if the difference between the best function values in
the new and old populations, as well as the distance between the new best point and the old
best point, are less than the tolerances provided by AccuracyGoal and PrecisionGoal.

The differential evolution method is computationally expensive, but is relatively robust and
tends to work well for problems that have more local minima.

option name default value


"CrossProbability" 0.5 probability that a gene is taken from xi

"InitialPoints" Automatic set of initial points


"PenaltyFunction" Automatic function applied to constraints to penalize
invalid points
"PostProcess" Automatic whether to post-process using local search
methods
"RandomSeed" 0 starting value for the random number
generator
"ScalingFactor" 0.6 scale applied to the difference vector in
creating a mate
"SearchPoints" Automatic size of the population used for evolution
"Tolerance" 0.001 tolerance for accepting constraint violations

DifferentialEvolution specific options.


Constrained Optimization 49

Here the function inside the unit disk is minimized using DifferentialEvolution.
2
In[125]:= NMinimizeB:100 Iy - x2 M + H1 - xL2 , x2 + y2 § 1>,
8x, y<, Method Ø "DifferentialEvolution"F
Out[125]= 80.0456748, 8x Ø 0.786415, y Ø 0.617698<<

The following constrained optimization problem has a global minimum of 7.66718.


In[126]:= Clear@f, c, v, x1, x2, y1, y2, y3D

In[127]:= f = 2 x1 + 3 x2 + 3 y1 ê 2 + 2 y2 - y3 ê 2;
c = 8x1 ^ 2 + y1 ã 5 ê 4, x2 ^ H3 ê 2L + 3 y2 ê 2 == 3,
x1 + y1 § 8 ê 5, 4 x2 ê 3 + y2 § 3, y3 § y1 + y2, 0 § x1 § 10, 0 § x2 § 10,
0 § y1 § 1, 0 § y2 § 1, 0 § y3 § 1, 8y1, y2, y3< œ Integers
<;
v = 8x1, x2, y1, y2, y3<;

With the default settings for DifferentialEvolution, an unsatisfactory solution results.


In[130]:= NMinimize@8f, c<, v, Method Ø "DifferentialEvolution"D
Out[130]= 87.93086, 8x1 Ø 0.499931, x2 Ø 1.31033, y1 Ø 1, y2 Ø 1, y3 Ø 1<<

By adjusting ScalingFactor, the results are much better. In this case, the increased
ScalingFactor gives DifferentialEvolution better mobility with respect to the integer
variables.
In[131]:= NMinimize@8f, c<, v, Method Ø 8"DifferentialEvolution", "ScalingFactor" Ø 1<D
Out[131]= 87.66718, 8x1 Ø 1.11803, x2 Ø 1.31037, y1 Ø 0, y2 Ø 1, y3 Ø 1<<

Simulated Annealing
Simulated annealing is a simple stochastic function minimizer. It is motivated from the physical
process of annealing, where a metal object is heated to a high temperature and allowed to cool
slowly. The process allows the atomic structure of the metal to settle to a lower energy state,
thus becoming a tougher metal. Using optimization terminology, annealing allows the structure
to escape from a local minimum, and to explore and settle on a better, hopefully global,
minimum.

At each iteration, a new point, xnew , is generated in the neighborhood of the current point, x.
The radius of the neighborhood decreases with each iteration. The best point found so far, xbest ,
is also tracked.

If f Hxnew L § f Hxbest L, xnew replaces xbest and x. Otherwise, xnew replaces x with a probability ebIi, D f , f0 M .
Here b is the function defined by BoltzmannExponent, i is the current iteration, D f is the change
in the objective function value, and f0 is the value of the objective function from the previous
-D f logHi+1L
iteration. The default function for b is .
50 Constrained Optimization

If f Hxnew L § f Hxbest L, xnew replaces xbest and x. Otherwise, xnew replaces x with a probability ebIi, D f , f0 M .
Here b is the function defined by BoltzmannExponent, i is the current iteration, D f is the change
in the objective function value, and f0 is the value of the objective function from the previous
-D f logHi+1L
iteration. The default function for b is 10
.

Like the RandomSearch method, SimulatedAnnealing uses multiple starting points, and finds
an optimum starting from each of them.

The default number of starting points, given by the option SearchPoints, is minH2 d, 50L, where d
is the number of variables.

For each starting point, this is repeated until the maximum number of iterations is reached, the
method converges to a point, or the method stays at the same point consecutively for the
number of iterations given by LevelIterations.

option name default value


"BoltzmannExponent" Automatic exponent of the probability function
"InitialPoints" Automatic set of initial points
"LevelIterations" 50 maximum number of iterations to stay at a
given point
"PenaltyFunction" Automatic function applied to constraints to penalize
invalid points
"PerturbationScale" 1.0 scale for the random jump
"PostProcess" Automatic whether to post-process using local search
methods
"RandomSeed" 0 starting value for the random number
generator
"SearchPoints" Automatic number of initial points
"Tolerance" 0.001 tolerance for accepting constraint violations

SimulatedAnnealing specific options.

Here a function in two variables is minimized using SimulatedAnnealing.


2
In[62]:= NMinimizeB:100 Iy - x2 M + H1 - xL2 , - 2.084 § x § 2.084 && - 2.084 § y § 2.084>,
8x, y<, Method Ø "SimulatedAnnealing"F
Out[62]= 80., 8x Ø 1., y Ø 1.<<
Constrained Optimization 51

Here is a function with many local minima.


In[63]:= Clear@fD
f@x_, y_D := 20 Sin@p ê 2 Hx - 2 pLD + 20 Sin@p ê 2 Hy - 2 pLD + Hx - 2 pL2 + Hy - 2 pL2 ;
Plot3D@f@x, yD, 8x, 0, 10<, 8y, 0, 10<D

Out[65]=

By default, the step size for SimulatedAnnealing is not large enough to escape from the
local minima.
In[68]:= NMinimize@f@x, yD, 8x, y<, Method Ø "SimulatedAnnealing"D
Out[68]= 88.0375, 8x Ø 1.48098, y Ø 1.48098<<

By increasing PerturbationScale, larger step sizes are taken to produce a much better
solution.
In[69]:= NMinimize@f@x, yD, 8x, y<, Method Ø 8"SimulatedAnnealing", "PerturbationScale" Ø 3<D
Out[69]= 8-38.0779, 8x Ø 5.32216, y Ø 5.32216<<

Here BoltzmannExponent is set to use an exponential cooling function that gives faster
convergence. (Note that the modified PerturbationScale is still being used as well.)
In[70]:= NMinimize@f@x, yD, 8x, y<, Method Ø 8"SimulatedAnnealing", "PerturbationScale" Ø 3,
"BoltzmannExponent" Ø Function@8i, df, f0<, - df ê HExp@i ê 10DLD<D
Out[70]= 8-38.0779, 8x Ø 5.32216, y Ø 5.32216<<

Random Search
The random search algorithm works by generating a population of random starting points and
uses a local optimization method from each of the starting points to converge to a local mini-
mum. The best local minimum is chosen to be the solution.

The possible local search methods are Automatic and "InteriorPoint". The default method is
Automatic, which uses FindMinimum with unconstrained methods applied to a system with
penalty terms added for the constraints. When Method is set to "InteriorPoint", a nonlinear
interior-point method is used.
52 Constrained Optimization

The possible local search methods are Automatic and "InteriorPoint". The default method is
Automatic, which uses FindMinimum with unconstrained methods applied to a system with
penalty terms added for the constraints. When Method is set to "InteriorPoint", a nonlinear
interior-point method is used.

The default number of starting points, given by the option SearchPoints, is minH10 d, 100L, where
d is the number of variables.

Convergence for RandomSearch is determined by convergence of the local method for each
starting point.

RandomSearch is fast, but does not scale very well with the dimension of the search space. It
also suffers from many of the same limitations as FindMinimum . It is not well suited for discrete
problems and others where derivatives or secants give little useful information about the prob-
lem.

option name default value


"InitialPoints" Automatic set of initial points
"Method" Automatic which method to use for minimization
"PenaltyFunction" Automatic function applied to constraints to penalize
invalid points
"PostProcess" Automatic whether to post-process using local search
methods
"RandomSeed" 0 starting value for the random number
generator
"SearchPoints" Automatic number of points to use for starting local
searches
"Tolerance" 0.001 tolerance for accepting constraint violations

RandomSearch specific options.

Here the function inside the unit disk is minimized using RandomSearch.
2
In[71]:= NMinimizeB:100 Iy - x2 M + H1 - xL2 , x ^ 2 + y ^ 2 § 1>, 8x, y<, Method Ø "RandomSearch"F
Out[71]= 80.0456748, 8x Ø 0.786415, y Ø 0.617698<<
Constrained Optimization 53

Here is a function with several local minima that are all different depths and are generally
difficult to optimize.
In[72]:= Clear@a, fD;
a = Reverse êü Distribute@88- 32, - 16, 0, 16, 32<, 8- 32, - 16, 0, 16, 32<<, ListD;
f = 1 ê H0.002 + Plus üü MapIndexed@1 ê HÒ2P1T + Plus üü HH8x, y< - Ò1L ^ 6LL &, aDL;
Plot3D@f, 8x, - 50, 50<, 8y, - 50, 50<, Mesh Ø None,
NormalsFunction Ø "Weighted", PlotPoints Ø 50D

Out[72]=

With the default number of SearchPoints, sometimes the minimum is not found.
In[73]:= Do@Print@NMinimize@f, 88x, - 50, 50<, 8y, - 50, 50<<,
Method Ø 8"RandomSearch", "RandomSeed" Ø i<DD, 8i, 5<D
81.99203, 8x Ø -15.9864, y Ø -31.9703<<
81.99203, 8x Ø -15.9864, y Ø -31.9703<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
81.99203, 8x Ø -15.9864, y Ø -31.9703<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<

Using many more SearchPoints produces better answers.


In[74]:= Do@Print@NMinimize@f, 88x, - 50, 50<, 8y, - 50, 50<<,
Method Ø 8"RandomSearch", "SearchPoints" Ø 100, "RandomSeed" Ø i<DD, 8i, 5<D
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
80.998004, 8x Ø -31.9783, y Ø -31.9783<<
54 Constrained Optimization

Here points are generated on a grid for use as initial points.


In[75]:= NMinimize@f, 88x, - 50, 50<, 8y, - 50, 50<<, Method Ø 8"RandomSearch",
"InitialPoints" Ø Flatten@Table@8i, j<, 8i, - 45, 45, 5<, 8j, - 45, 45, 5<D, 1D<D
Out[75]= 80.998004, 8x Ø -31.9783, y Ø -31.9783<<

This uses nonlinear interior point methods to find the minimum of a sum of squares.
In[76]:= n = 10;
f = SumAHx@iD - Sin@iDL2 , 8i, 1, n<E;
c = Table@- 0.5 < x@iD < 0.5, 8i, n<D;
v = Array@x, nD;
Timing@NMinimize@8f, c<, v, Method Ø 8"RandomSearch", Method Ø "InteriorPoint"<DD
Out[80]= 88.25876, 80.82674, 8x@1D Ø 0.5, x@2D Ø 0.5, x@3D Ø 0.14112, x@4D Ø -0.5,
x@5D Ø -0.5, x@6D Ø -0.279415, x@7D Ø 0.5, x@8D Ø 0.5, x@9D Ø 0.412118, x@10D Ø -0.5<<<

For some classes of problems, limiting the number of SearchPoints can be much faster
without affecting the quality of the solution.
In[81]:= Timing@NMinimize@8f, c<, v,
Method Ø 8"RandomSearch", Method Ø "InteriorPoint", "SearchPoints" Ø 1<DD
Out[81]= 80.320425, 80.82674, 8x@1D Ø 0.5, x@2D Ø 0.5, x@3D Ø 0.14112, x@4D Ø -0.5,
x@5D Ø -0.5, x@6D Ø -0.279415, x@7D Ø 0.5, x@8D Ø 0.5, x@9D Ø 0.412118, x@10D Ø -0.5<<<

Exact Global Optimization

Introduction
Exact global optimization problems can be solved exactly using Minimize and Maximize.

This computes the radius of the circle, centered at the origin, circumscribed about the set
x4 + 3 y4 § 7.

In[1]:= MaximizeB: x2 + y2 , x4 + 3 y4 § 7>, 8x, y<F


1ë4
7
Out[1]= : 2 , 9x Ø RootA-21 + 4 Ò14 &, 1E, y Ø RootA-7 + 12 Ò14 &, 1E=>
3
Constrained Optimization 55

This computes the radius of the circle, centered at the origin, circumscribed about the set
a x2 + b y2 § 1 as a function of the parameters a and b.

In[2]:= MaximizeB: x2 + y2 , a x2 + b y2 § 1>, 8x, y<F

1
Hb > 0 && a ã bL »» Hb > 0 && 0 < a < bL
a

1
b > 0 && a ã 2 b
Out[2]= : a-b ,

1
Hb > 0 && a > 2 bL »» Hb > 0 && b < a < 2 bL
b

¶ True
0 Hb > 0 && a ã 2 bL »» Hb > 0 && a > 2 bL »» Hb > 0 && b < a < 2 bL

1
- b > 0 && 0 < a < b
a
:x Ø ,
1
a
- b > 0 && a ã b
2
Indeterminate True
0 b > 0 && 0 < a < b

1 1
- 3 b > 0 && a ã b
2 a

1
yØ - b > 0 && a ã 2 b >>
a-b

1
- Hb > 0 && a > 2 bL »» Hb > 0 && b < a < 2 bL
b

Indeterminate True

Algorithms
Depending on the type of problem, several different algorithms can be used.

The most general method is based on the cylindrical algebraic decomposition (CAD) algorithm.
It applies when the objective function and the constraints are real algebraic functions. The
method can always compute global extrema (or extremal values, if the extrema are not
attained). If parameters are present, the extrema can be computed as piecewise-algebraic
functions of the parameters. A downside of the method is its high, doubly exponential complex-
ity in the number of variables. In certain special cases not involving parameters, faster methods
can be used.

When the objective function and all constraints are linear with rational number coefficients,
global extrema can be computed exactly using the simplex algorithm.

For univariate problems, equation and inequality solving methods are used to find the con-
straint solution set and discontinuity points and zeros of the derivative of the objective function
within the set.
56 Constrained Optimization

For univariate problems, equation and inequality solving methods are used to find the con-
straint solution set and discontinuity points and zeros of the derivative of the objective function
within the set.

Another approach to finding global extrema is to find all the local extrema, using the Lagrange
multipliers or the Karush|Kuhn|Tucker (KKT) conditions, and pick the smallest (or the greatest).
However, for a fully automatic method, there are additional complications. In addition to solving
the necessary conditions for local extrema, it needs to check smoothness of the objective func-
tion and smoothness and nondegeneracy of the constraints. It also needs to check for extrema
at the boundary of the set defined by the constraints and at infinity, if the set is unbounded.
This in general requires exact solving of systems of equations and inequalities over the reals,
which may lead to CAD computations that are harder than in the optimization by CAD algo-
rithm. Currently Mathematica uses Lagrange multipliers only for equational constraints within a
bounded box. The method also requires that the number of stationary points and the number of
singular points of the constraints be finite. An advantage of this method over the CAD-based
algorithm is that it can solve some transcendental problems, as long as they lead to systems of
equations that Mathematica can solve.

Optimization by Cylindrical Algebraic Decomposition

Examples

This finds the point on the cubic curve x3 - x + y2 


1
which is closest to the origin.
4
1
In[3]:= MinimizeB:x2 + y2 , x3 + y2 - x ã >, 8x, y<F
4
2 3 3
Out[3]= 9RootA-1 + 16 Ò1 - 32 Ò1 + 16 Ò1 &, 1E, 9x Ø RootA-1 - 4 Ò1 + 4 Ò1 &, 2E, y Ø 0==

This finds the point on the cubic curve x3 - x + y2  a which is closest to the origin, as a function
of the parameter a.
In[4]:= min = MinimizeA9x2 + y2 , x3 + y2 - x ã a=, 8x, y<E
1 8

9 27
1 8 80
Out[4]= : H-5 + 27 aL <a§ ,
27 27 27

RootA-a2 + Ò1 - 2 Ò12 + Ò13 &, 1E True

: , yØ
Out[4]=
Constrained Optimization 57

1 8 8 80
- aã »» <a§
3 27 27 27
80 2
:x Ø RootA-a + RootA-a2 + Ò1 - 2 Ò12 + Ò13 &, 1E - Ò1 - Ò12 + Ò13 &, 1E a > »» a < - , yØ
27
3 3

RootA-a + RootA-a2 + Ò1 - 2 Ò12 + Ò13 &, 1E - Ò1 - Ò12 + Ò13 &, 2E True


8
0 aã
27

8 8 80
- - +a <a§
27 27 27

80
-- Ja + RootA-a + RootA-a2 + Ò1 - 2 Ò12 + Ò13 &, 1E - Ò1 - Ò12 + Ò13 &, 1E - a> »» a < -
27
3 3
RootA-a + RootA-a2 + Ò1 - 2 Ò12 + Ò13 &, 1E - Ò1 - Ò12 + Ò13 &, 1E N

-- Ja + RootA-a + RootA-a2 + Ò1 - 2 Ò12 + Ò13 &, 1E - Ò1 - Ò12 + Ò13 &, 2E - True


2 2 3 2 3 3
RootA-a + RootA-a + Ò1 - 2 Ò1 + Ò1 &, 1E - Ò1 - Ò1 + Ò1 &, 2E N

>>

This visualization shows the point on the cubic curve x3 - x + y2  a which is closest to the origin,
and the distance m of the point from the origin. The value of parameter a can be modified using
the slider. The visualization uses the minimum computed by Minimize .
In[5]:= plot@a_D := ContourPlotAx3 + y2 - x ã a,
8x, - 3, 3<, 8y, - 3, 3<, PlotRange -> 88- 3, 3<, 8- 3, 3<<E;
minval@a_D := Evaluate@min@@1DDD
minpt@a_D := Evaluate@min@@2DDD
mmark = Graphics@Text@Style@"m=", 10D, 81.25, 2.5<DD;
mvalue@a_D :=
Graphics@Text@Style@PaddedForm@minval@aD, 85, 3<D, 10D, 82, 2.5<DD;
amark = Graphics@Text@Style@"a=", 10D, 81.25, 2.8<DD;
avalue@a_D := Graphics@Text@Style@PaddedForm@a, 85, 3<D, 10D, 82, 2.8<DD;
mpoint@a_D := Graphics@8PointSize@0.03D, Red, Point@Re@8x, y< ê. minpt@aDDD<D;
Manipulate@Show@8plot@aD, amark, avalue@aD, mmark, mvalue@aD, mpoint@aD<D,
88a, 4.5<, - 5, 5<, SaveDefinitions Ø TrueD

3
a= 4.500
m= 3.430
2

1
Out[13]=
0

-1

-2

-3
-3 -2 -1 0 1 2 3

Customized CAD Algorithm for Optimization


58 Constrained Optimization

Customized CAD Algorithm for Optimization


The cylindrical algebraic decomposition (CAD) algorithm is available in Mathematica directly as
CylindricalDecomposition. The algorithm is described in more detail in "Real Polynomial
Systems". The following describes how to customize the CAD algorithm to solve the global
optimization problem.

Reduction to Minimizing a Coordinate Function


Suppose it is required to minimize an algebraic function f Hx, tL over the solution sets of algebraic
constraints FHx, tL, where x is a vector of variables and t is a vector of parameters. Let y be a
new variable. The minimization of f over the constraints F is equivalent to the minimization of
the coordinate function y over the semialgebraic set given by y  f Hx, tL Ï FHx, tL.

If f happens to be a monotonic function of one variable x1 , a new variable is not needed, as x1


can be minimized instead.

The Projection Phase of CAD


The variables are projected, with x first, then the new variable y, and then the parameters t.

If algebraic functions are present, they are replaced with new variables; equations and inequali-
ties satisfied by the new variables are added. The variables replacing algebraic functions are
projected first. They also require special handling in the lifting phase of the algorithm.

Projection operator improvements by Hong, McCallum, and Brown can be used here, including
the use of equational constraints. Note that if a new variable needs to be introduced, there is at
least one equational constraint, namely y ã f .

The Lifting Phase of CAD


The parameters t are lifted first, constructing the algebraic function equation and inequality
description of the cells. If there are constraints that depend only on parameters and you can
determine that F is identically false over a parameter cell, you do not need to lift this cell
further.

When lifting the minimization variable y, you start with the smallest values of y, and proceed
(lifting the remaining variables in the depth-first manner) until you find the first cell for which
the constraints are satisfied. If this cell corresponds to a root of a projection polynomial in y,
Constrained Optimization 59

When lifting the minimization variable y, you start with the smallest values of y, and proceed
(lifting the remaining variables in the depth-first manner) until you find the first cell for which
the constraints are satisfied. If this cell corresponds to a root of a projection polynomial in y,
the root is the minimum value of f , and the coordinates corresponding to x of any point in the
cell give a point at which the minimum is attained. If parameters are present, you get a paramet -
ric description of a point in the cell in terms of roots of polynomials bounding the cell. If there
are no parameters, you can simply give the sample point used by the CAD algorithm. If the first
cell satisfying the constraints corresponds to an interval Hr, sL, where r is a root of a projection
polynomial in y, then r is the infimum of values of f , and the infimum value is not attained.
Finally, if the first cell satisfying the constraints corresponds to an interval H-¶, sL, f is
unbounded from below.

Strict Inequality Constraints


If there are no parameters, all constraints are strict inequalities, and you only need the
extremum value, then a significantly simpler version of the algorithm can be used. (You can
safely make inequality constraints strict if you know that C Œ intHCL, where C is the solution set of
the constraints.) In this case many lower-dimensional cells can be disregarded; hence, the
projection may only consist of the leading coefficients, the resultants, and the discriminants. In
the lifting phase, only full-dimensional cells need be constructed; hence, there is no need for
algebraic number computations.

Experimental`Infimum@8 f ,cons<,8x,y,…<D
find the infimum of values of f on the set of points satisfy-
ing the constraints cons.
Experimental`Supremum@8 f ,cons<,8x,y,…<D
find the supremum of values of f on the set of points
satisfying the constraints cons.

Finding extremum values.

This finds the smallest ball centered at the origin which contains the set bounded by the surface
x4 - y z x + 2 y4 + 3 z4  1. A full Maximize call with the same input did not finish in 10 minutes.
In[14]:= Experimental`SupremumA9x2 + y2 + z2 , x4 + 2 y4 + 3 z4 - x y z < 1=, 8x, y, z<E êê Timing
2
Out[14]= 94.813, -RootA-1 341 154 819 099 - 114 665 074 208 Ò1 + 4 968 163 024 164 Ò1 +
288 926 451 967 Ò13 - 7 172 215 018 940 Ò14 - 240 349 978 752 Ò15 + 5 066 800 071 680 Ò16 +
69 844 008 960 Ò17 - 1 756 156 133 376 Ò18 - 2 717 908 992 Ò19 + 239 175 991 296 Ò110 &, 1E=

Linear Optimization
60 Constrained Optimization

Linear Optimization
When the objective function and all constraints are linear, global extrema can be computed
exactly using the simplex algorithm.

This solves a random linear minimization problem with ten variables.


In[15]:= SeedRandom@1D; n = 10;
A = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<, 8n<D;
B = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<, 8n<D;
a = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<D;
b = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<D;
g = Table@RandomInteger@8- 1000, 1000<D, 8n<D;
X = x êü Range@nD;
Minimize@8g.X, And üü Thread@A.X ã aD && And üü Thread@b § B.X § b + 100D<, XD
6 053 416 204 117 714 679 590 329 859 484 149
Out[22]= : ,
1 194 791 208 768 786 909 167 074 679 920
1 231 164 669 474 551 725 622 041 404 999 1 324 409 686 130 055 761 704 674 699 781
:x@1D Ø , x@2D Ø - ,
1 194 791 208 768 786 909 167 074 679 920 597 395 604 384 393 454 583 537 339 960
33 103 498 981 835 356 980 792 655 092 859 057 104 531 672 755 759 277 109 213
x@3D Ø , x@4D Ø - ,
74 674 450 548 049 181 822 942 167 495 597 395 604 384 393 454 583 537 339 960
1 101 359 025 510 393 235 751 743 044 237 681 114 758 987 787 242 569 015 281 099
x@5D Ø - , x@6D Ø ,
1 194 791 208 768 786 909 167 074 679 920 597 395 604 384 393 454 583 537 339 960
3 008 784 898 283 435 639 647 867 743 656 889 989 559 037 679 422 691 779 229
x@7D Ø , x@8D Ø ,
14 934 890 109 609 836 364 588 433 499 597 395 604 384 393 454 583 537 339 960
1 769 243 029 064 640 615 513 519 505 823 699 425 860 731 183 550 585 590 812 579
x@9D Ø , x@10D Ø >>
597 395 604 384 393 454 583 537 339 960 1 194 791 208 768 786 909 167 074 679 920

Optimization problems where the objective is a fraction of linear functions and the constraints
are linear (linear fractional programs) reduce to linear optimization problems. This solves a
random linear fractional minimization problem with ten variables.
In[23]:= SeedRandom@2D; n = 10;
A = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<, 8n<D;
B = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<, 8n<D;
a = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<D;
b = Table@RandomInteger@8- 1000, 1000<D, 8n ê 2<D;
g = Table@RandomInteger@8- 1000, 1000<D, 8n<D;
d = Table@RandomInteger@8- 1000, 1000<D, 8n<D;
X = x êü Range@nD;
Minimize@8g.X ê d.X, And üü Thread@A.X ã aD && And üü Thread@b § B.X § b + 100D<, XD
1 286 274 653 702 415 809 313 525 025 452 519
Out[31]= :- ,
437 743 412 320 661 916 541 674 600 912 158
611 767 491 996 227 433 062 183 883 923 2 665 078 586 976 600 235 350 409 286 849
:x@1D Ø , x@2D Ø ,
599 276 957 533 098 032 663 796 688 622 1 198 553 915 066 196 065 327 593 377 244
215 391 679 158 483 849 611 061 030 533 1 477 394 491 589 036 027 204 142 993 013
x@3D Ø - , x@4D Ø ,
299 638 478 766 549 016 331 898 344 311 599 276 957 533 098 032 663 796 688 622
Constrained Optimization 61

473 657 331 854 113 835 444 689 628 600 955 420 726 065 204 315 229 251 112 109
x@5D Ø , x@6D Ø - ,
299 638 478 766 549 016 331 898 344 311 599 276 957 533 098 032 663 796 688 622
265 603 080 958 760 324 085 018 021 123 447 840 634 450 080 124 431 365 644 067
x@7D Ø , x@8D Ø - ,
1 198 553 915 066 196 065 327 593 377 244 599 276 957 533 098 032 663 796 688 622
2 155 930 215 697 442 604 517 040 669 063 18 201 652 848 869 287 002 844 477 177
x@9D Ø - , x@10D Ø >>
1 198 553 915 066 196 065 327 593 377 244 299 638 478 766 549 016 331 898 344 311

Univariate Optimization
For univariate problems, equation and inequality solving methods are used to find the con-
straint solution set and discontinuity points and zeros of the derivative of the objective function
within the set.

This solves a univariate optimization problem with a transcendental objective function.

In[32]:= m = MinimizeAx2 + 2x , xE
2
Log@2D2 Log@2D2 Log@2D2
-
ProductLogB
2
F
ProductLogB F ProductLogB F
2 2
Out[32]= :2 LogA2E
+ , :x Ø - >>
Log@2D2 Log@2D

Here is a visualization of the minimum found.

In[33]:= ShowA9PlotAx2 + 2x , 8x, - 1, 1<E,


Graphics@8PointSize@0.02D, Red, Point@N@8x ê. m@@2DD, m@@1DD<DD<D=E
3.0

2.5

Out[33]= 2.0

1.5

-1.0 -0.5 0.5 1.0

Here Mathematica recognizes that the objective functions and the constraints are periodic.
p 2 1 1
In[34]:= MinimizeB:TanB2 x - F ,- § Sin@xD § >, xF
2 2 2
1 p
Out[34]= : , :x Ø >>
3 6

Optimization by Finding Stationary and Singular


Points
62 Constrained Optimization

Optimization by Finding Stationary and Singular


Points

Here is an example where the minimum is attained at a singular point of the constraints.

In[35]:= m = MinimizeA9y, y3 ã x2 && - 2 § x § 2 && - 2 § y § 2=, 8x, y<E


Out[35]= 80, 8x Ø 0, y Ø 0<<

In[36]:= ShowA9ContourPlotAy3 ã x2 , 8x, - 2, 2<, 8y, - 0.5, 2<E,


Graphics@8PointSize@0.02D, Red, Point@8x, y< ê. m@@2DDD<D=E
2.0

1.5

1.0

Out[36]=
0.5

0.0

-0.5
-2 -1 0 1 2

The maximum of the same objective function is attained on the boundary of the set defined by
the constraints.
In[37]:= m = MaximizeA9y, y3 ã x2 && - 2 § x § 2 && - 2 § y § 2=, 8x, y<E
3 3
Out[37]= 9RootA-4 + Ò1 &, 1E, 9x Ø -2, y Ø RootA-4 + Ò1 &, 1E==

In[38]:= ShowA9ContourPlotAy3 ã x2 , 8x, - 2, 2<, 8y, - 0.5, 2<E,


Graphics@8PointSize@0.02D, Red, Point@8x, y< ê. m@@2DDD<D=E
2.0

1.5

1.0

Out[38]=
0.5

0.0

-0.5
-2 -1 0 1 2

There are no stationary points in this example.


Constrained Optimization 63

There are no stationary points in this example.

In[39]:= ReduceAy3 ã x2 && - 2 x l ã 0 && 1 + 3 y2 l ã 0, 8x, y, l<E


Out[39]= False

Here is a set of 3-dimensional examples with the same constraints. Depending on the objective
function, the maximum is attained at a stationary point of the objective function on the solution
set of the constraints, at a stationary point of the restriction of the objective function to the
boundary of the solution set of the constraints, and at the boundary of the boundary of the
solution set of the constraints.

Here the maximum is attained at a stationary point of the objective function on the solution set
of the constraints.
In[40]:= m = MaximizeAx + y + z, x2 + y2 + z2 ã 9 && - 2 § x § 2 && - 2 § y § 2 && - 2 § z § 2, 8x, y, z<E

Out[40]= :3 3 , :x Ø 3 , yØ 3 , zØ 3 >>

In[41]:= ShowA9ContourPlot3DAx2 + y2 + z2 - 9 ã 0, 8x, - 2, 2<, 8y, - 2, 2<, 8z, - 2, 2<E,


Graphics3D@8PointSize@0.03D, Red, Point@8x, y, z< ê. m@@2DDD<D=,
ViewPoint Ø 83, 3, 3<E

Out[41]=

Here the maximum is attained at a stationary point of the restriction of the objective function to
the boundary of the solution set of the constraints.
In[42]:= m = MaximizeAx + y + 2 z, x2 + y2 + z2 ã 9 && - 2 § x § 2 && - 2 § y § 2 && - 2 § z § 2, 8x, y, z<E

5 5
Out[42]= :4 + 10 , :x Ø , yØ , z Ø 2>>
2 2
64 Constrained Optimization

In[43]:= ShowA9ContourPlot3DAx2 + y2 + z2 - 9 ã 0, 8x, - 2, 2<, 8y, - 2, 2<, 8z, - 2, 2<E,


Graphics3D@8PointSize@0.03D, Red, Point@8x, y, z< ê. m@@2DDD<D=,
ViewPoint Ø 83, 7, 7<E

Out[43]=

Here the maximum is attained at the boundary of the boundary of the solution set of the
constraints.
In[44]:= m = MaximizeAx + 2 y + 2 z, x2 + y2 + z2 ã 9 && - 2 § x § 2 && - 2 § y § 2 && - 2 § z § 2, 8x, y, z<E
Out[44]= 89, 8x Ø 1, y Ø 2, z Ø 2<<

In[45]:= ShowA9ContourPlot3DAx2 + y2 + z2 - 9 ã 0, 8x, - 2, 2<, 8y, - 2, 2<, 8z, - 2, 2<E,


Graphics3D@8PointSize@0.03D, Red, Point@8x, y, z< ê. m@@2DDD<D=E

Out[45]=
Constrained Optimization 65

The Lagrange multiplier method works for some optimization problems involving transcendental
functions.
In[46]:= MinimizeA9y + Sin@10 xD, y3 ã Cos@5 xD && - 5 § x § 5 && - 5 § y § 5=, 8x, y<E

Minimize::ztest : Unable to decide whether numeric quantities


8Sin@4 Hp - ArcTan@AlgebraicNumber@á2àDDLD - Sin@4 H2 p - ArcTan@á1àDLD, á5à, Sin@4 Hp - ArcTan@
AlgebraicNumber@á2àDDLD + Sin@á1àD<
are equal to zero. Assuming they are.

Out[46]= :AlgebraicNumberB
RootA43 046 721 - 95 659 380 Ò12 - 59 049 Ò13 + 78 653 268 Ò14 - 32 805 Ò15 - 29 052 108 Ò16 - 7290 Ò17 +
4 763 286 Ò18 - 810 Ò19 - 358 668 Ò110 - 45 Ò111 + 11 988 Ò112 - Ò113 - 180 Ò114 + Ò116 &, 6E,
2825 1 10 645 1271 117 277 421 177 851 157 13 523
:0, , , - , , , , - , , ,
256 81 768 186 624 20 736 279 936 186 624 944 784 186 624
625 36 749 83 4975 83
, - , , , 0, - >F - SinB
68 024 448 15 116 544 408 146 688 136 048 896 408 146 688
4 p - ArcTanBAlgebraicNumberBRootA43 046 721 - 95 659 380 Ò12 - 59 049 Ò13 + 78 653 268 Ò14 - 32 805 Ò15 -

29 052 108 Ò16 - 7290 Ò17 + 4 763 286 Ò18 - 810 Ò19 - 358 668 Ò110 - 45 Ò111 + 11 988 Ò112 -
1
Ò113 - 180 Ò114 + Ò116 &, 6E, :0, , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>FF F,
3
2
:x Ø - p - ArcTanBAlgebraicNumberBRootA43 046 721 - 95 659 380 Ò12 - 59 049 Ò13 + 78 653 268 Ò14 -
5
32 805 Ò15 - 29 052 108 Ò16 - 7290 Ò17 + 4 763 286 Ò18 - 810 Ò19 - 358 668 Ò110 - 45 Ò111 + 11 988
1
Ò112 - Ò113 - 180 Ò114 + Ò116 &, 6E, :0, , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>FF ,
3
y Ø AlgebraicNumberBRootA43 046 721 - 95 659 380 Ò12 - 59 049 Ò13 + 78 653 268 Ò14 -
32 805 Ò15 - 29 052 108 Ò16 - 7290 Ò17 + 4 763 286 Ò18 - 810 Ò19 -
358 668 Ò110 - 45 Ò111 + 11 988 Ò112 - Ò113 - 180 Ò114 + Ò116 &, 6E,
2825 1 10 645 1271 117 277 421 177 851 157 13 523
:0, , , - , , , , - , , ,
256 81 768 186 624 20 736 279 936 186 624 944 784 186 624
625 36 749 83 4975 83
, - , , , 0, - >F>>
68 024 448 15 116 544 408 146 688 136 048 896 408 146 688

In[47]:= N@%, 20D


Out[47]= 8-1.9007500346675151230, 8x Ø -0.77209298024514961134, y Ø -0.90958837944086038552<<
66 Constrained Optimization

Optimization over the Integers

Integer Linear Programming


An integer linear programming problem is an optimization problem in which the objective func-
tion is linear, the constraints are linear and bounded, and the variables range over the integers.

To solve an integer linear programming problem Mathematica first solves the equational con-
straints, reducing the problem to one containing inequality constraints only. Then it uses lattice
reduction techniques to put the inequality system in a simpler form. Finally, it solves the simpli-
fied optimization problem using a branch-and-bound method.

This solves a randomly generated integer linear programming problem with 7 variables.
In[48]:= SeedRandom@1D;
A = Table@RandomInteger@8- 1000, 1000<D, 83<, 87<D;
a = Table@RandomInteger@8- 1000, 1000<D, 83<D;
B = Table@RandomInteger@8- 1000, 1000<D, 83<, 87<D;
b = Table@RandomInteger@8- 1000, 1000<D, 83<D;
g = Table@RandomInteger@8- 1000, 1000<D, 87<D;
X = x êü Range@7D;
eqns = And üü Thread@A.X ã aD;
ineqs = And üü Thread@B.X § bD;
bds = And üü Thread@X ¥ 0D && Total@XD § 10100 ;
Minimize@8g.X, eqns && ineqs && bds && X œ Integers<, XD
Out[58]= 8448 932, 8x@1D Ø 990, x@2D Ø 1205, x@3D Ø 219, x@4D Ø 60, x@5D Ø 823, x@6D Ø 137, x@7D Ø 34<<

Optimization over the Reals Combined with Integer Solution


Finding
Suppose a function f œ @xD needs to be minimized over the integer solution set of constraints
FHxL. Let m be the minimum of f over the real solution set of FHxL. If there exists an integer point
satisfying f HxL  `mp Ï FHxL, then `mp is the minimum of f over the integer solution set of F. Other-
wise you try to find an integer solution of f HxL  `mp + 1 Ï FHxL, and so on. This heuristic works if
you can solve the real optimization problem and all the integer solution finding problems, and
you can find an integer solution within a predefined number of attempts. (By default Mathemat-
ica tries 10 candidate optimum values. This can be changed using the
IntegerOptimumCandidates system option.)
Constrained Optimization 67

This finds a point with integer coordinates maximizing x + y among the points lying below the
cubic x3 + y3  1000.
In[59]:= m = MaximizeA9x + y, x3 + y3 § 1000 && Hx yL œ Integers=, 8x, y<E
Out[59]= 815, 8x Ø 6, y Ø 9<<

In[60]:= ShowA9ContourPlotAx3 + y3 ã 1000, 8x, - 20, 20<, 8y, - 20, 20<E,


Graphics@8PointSize@0.02D, Red, Point@8x, y< ê. m@@2DDD<D=E
20

10

Out[60]= 0

-10

-20
-20 -10 0 10 20

Comparison of Constrained Optimization


Functions
NMinimize, NMaximize, Minimize and Maximize employ global optimization algorithms, and
are thus suitable when a global optimum is needed.

Minimize and Maximize can find exact global optima for a class of optimization problems
containing arbitrary polynomial problems. However, the algorithms used have a very high
asymptotic complexity and therefore are suitable only for problems with a small number of
variables.

Maximize always finds a global maximum, even in cases that are numerically unstable. The
2
left-hand side of the constraint here is Ix2 + y2 - 1010 M Ix2 + y2 M.

In[1]:= MaximizeA9x + y,
100 000 000 000 000 000 000 x2 - 20 000 000 000 x4 + x6 + 100 000 000 000 000 000 000 y2 -
40 000 000 000 x2 y2 + 3 x4 y2 - 20 000 000 000 y4 + 3 x2 y4 + y6 § 1=, 8x, y<E êê N@Ò, 20D &
Out[1]= 8141 421.35623730957559, 8x Ø 70 710.678118654787795, y Ø 70 710.678118654787795<<

This input differs from the previous one only in the twenty-first decimal digit, but the answer is
quite different, especially the location of the maximum point. For an algorithm using 16 digits of
precision both problems look the same, hence it cannot possibly solve them both correctly.
68 Constrained Optimization

This input differs from the previous one only in the twenty-first decimal digit, but the answer is
quite different, especially the location of the maximum point. For an algorithm using 16 digits of
precision both problems look the same, hence it cannot possibly solve them both correctly.
In[2]:= MaximizeA9x + y,
100 000 000 000 000 000 001 x2 - 20 000 000 000 x4 + x6 + 100 000 000 000 000 000 000 y2 -
40 000 000 000 x2 y2 + 3 x4 y2 - 20 000 000 000 y4 + 3 x2 y4 + y6 § 1=, 8x, y<E êê N@Ò, 20D &
Out[2]= 8100 000.99999500000000, 8x Ø 1.0000000000000000000, y Ø 99 999.999995000000000<<

NMaximize, which by default uses machine-precision numbers, is not able to solve either of the
problems.
In[3]:= NMaximizeA
9x + y, 100 000 000 000 000 000 000 x2 - 20 000 000 000 x4 + x6 + 100 000 000 000 000 000 000 y2 -
40 000 000 000 x2 y2 + 3 x4 y2 - 20 000 000 000 y4 + 3 x2 y4 + y6 § 1=, 8x, y<E

NMaximize::incst :
NMaximize was unable to generate any initial points satisfying the inequality constraints
9-1 + 100000000000000000000 x2 - 20000000000 x4 + x6 + 100000000000000000000 y2 - á1à +
3 x4 y2 - 20000000000 y4 + 3 x2 y4 + y6 § 0=. The initial
region specified may not contain any feasible points. Changing the initial
region or specifying explicit initial points may provide a better solution. à
-10 -11 -11
Out[3]= 91.35248 µ 10 , 9x Ø 4.69644 µ 10 , y Ø 8.82834 µ 10 ==

In[4]:= NMaximizeA
9x + y, 100 000 000 000 000 000 001 x2 - 20 000 000 000 x4 + x6 + 100 000 000 000 000 000 000 y2 -
40 000 000 000 x2 y2 + 3 x4 y2 - 20 000 000 000 y4 + 3 x2 y4 + y6 § 1=, 8x, y<E

NMaximize::incst :
NMaximize was unable to generate any initial points satisfying the inequality constraints
9-1 + 100000000000000000001 x2 - 20000000000 x4 + x6 + 100000000000000000000 y2 - á1à +
3 x4 y2 - 20000000000 y4 + 3 x2 y4 + y6 § 0=. The initial
region specified may not contain any feasible points. Changing the initial
region or specifying explicit initial points may provide a better solution. à
-10 -11 -11
Out[4]= 91.35248 µ 10 , 9x Ø 4.69644 µ 10 , y Ø 8.82834 µ 10 ==

FindMinimum only attempts to find a local minimum, therefore is suitable when a local optimum
is needed, or when it is known in advance that the problem has only one optimum or only a few
optima that can be discovered using different starting points.

Even for local optimization, it may still be worth using NMinimize for small problems.
NMinimize uses one of the four direct search algorithms (Nelder|Mead, differential evolution,
simulated annealing, and random search), then finetunes the solution by using a combination of
KKT solution, the interior point, and a penalty method. So if efficiency is not an issue,
NMinimize should be more robust than FindMinimum , in addition to being a global optimizer.
Constrained Optimization 69

This shows the default behavior of NMinimize on a problem with four variables.

In[5]:= Clear@f, x, y, z, tD;


f = - Log@xD - 2 Log@yD - 3 Log@yD - 3 Log@tD;
cons = 9200 x2 + y2 + z2 + t2 == 100, x > 0, y > 0, z > 0, t > 0=;
vars = 8x, y, z, t<;
sol = NMinimize@8f, cons<, varsD
Out[9]= 8-13.8581, 8t Ø 5.7735, x Ø 0.235702, y Ø 7.45356, z Ø 0.00177238<<

This shows that two of the post-processors, KKT and FindMinimum , do not give the default
result. Notice that for historical reasons, the name FindMinimum , when used as an option value
of PostProcess, stands for the process where a penalty method is used to convert the con-
strained optimization problem into unconstrained optimization methods and then solved using
(unconstrained) FindMinimum .

In[10]:= sol = NMinimize@8f, cons<, vars, Method Ø 8NelderMead, PostProcess Ø KKT<D

NMinimize::nosat : Obtained solution does not satisfy the following


constraints within Tolerance -> 0.001`: 9100 - t2 - 200 x2 - y2 - z2 ã 0=. à
Out[10]= 80.759899, 8t Ø 9.98441, x Ø 0.0103018, y Ø 0.539287, z Ø 0.0246594<<

In[11]:= sol = NMinimize@8f, cons<, vars, Method Ø 8NelderMead, PostProcess Ø FindMinimum<D


Out[11]= 8-13.8573, 8t Ø 5.84933, x Ø 0.233007, y Ø 7.41126, z Ø 0.00968789<<

However, if efficiency is important, FindMinimum can be used if you just need a local minimum,
or you can provide a good starting point, or you know the problem has only one minimum
(e.g., convex), or your problem is large/expensive. This uses FindMinimum and NMinimize to
solve the same problem with seven variables. The constraints are relatively expensive to com-
pute. Clearly FindMinimum in this case is much faster than NMinimize.

In[12]:= Clear@f, cons, vars, xD;


8f, cons, vars< =
20 x@2D x@6D 15 x@3D x@4D 10 x@1D x@4D2 x@7D0.125`
: + + +
x@1D2 x@4D x@5D2 x@1D x@2D2 x@5D x@7D0.5` x@2D x@6D3
25 x@1D2 x@2D2 x@5D0.5` x@7D
, :0.1` § x@1D § 10, 0.1` § x@2D § 10, 0.1` § x@3D § 10,
x@3D x@6D2
0.1` § x@4D § 10, 0.1` § x@5D § 10, 0.1` § x@6D § 10, 0.01` § x@7D § 10,
0.2` x@3D x@6D2ê3 x@7D0.25` 0.7` x@1D3 x@2D x@6D x@7D0.5` 0.5` x@1D0.5` x@7D
1- - - ¥
x@2D x@4D0.5` x@3D2 x@3D x@6D2
3.1` x@2D0.5` x@6D1ê3 1.3` x@2D x@6D 0.8` x@3D x@6D2
0, 1 - - - ¥ 0,
x@1D x@4D2 x@5D x@1D0.5` x@3D x@5D x@4D x@5D
70 Constrained Optimization
0, 1 -

x@2D x@3D0.5` x@5D 0.1` x@2D x@5D 2 x@1D x@5D x@7D1ê3


1- - - -
x@1D x@3D0.5` x@6D x@7D0.5` x@3D1.5` x@6D
0.65` x@3D x@5D x@7D 0.3` x@1D0.5` x@2D2 x@3D x@4D1ê3 x@7D0.25`
¥ 0, 1 - -
x@2D2 x@6D x@5D2ê3
0.2` x@2D x@5D0.5` x@7D1ê3 0.5` x@4D x@7D0.5` 0.4` x@3D x@5D x@7D0.75`
- - ¥ 0,
x@1D2 x@4D x@3D2 x@1D3 x@2D2
20 x@2D x@6D 15 x@3D x@4D 10 x@1D x@4D2 x@7D0.125`
+ + +
x@1D2 x@4D x@5D2 x@1D x@2D2 x@5D x@7D0.5` x@2D x@6D3
25 x@1D2 x@2D2 x@5D0.5` x@7D 20 x@2D x@6D 15 x@3D x@4D
¥ 100, + +
2 2 2
x@3D x@6D x@1D x@4D x@5D x@1D x@2D2 x@5D x@7D0.5`
10 x@1D x@4D2 x@7D0.125` 25 x@1D2 x@2D2 x@5D0.5` x@7D
+ § 3000>,
x@2D x@6D3 x@3D x@6D2
8x@1D, x@2D, x@3D, x@4D, x@5D, x@6D, x@7D<>;

In[14]:= FindMinimum@8f, cons<, varsD êê Timing


Out[14]= 80.541, 8911.881, 8x@1D Ø 3.89625, x@2D Ø 0.809359, x@3D Ø 2.66439,
x@4D Ø 4.30091, x@5D Ø 0.853555, x@6D Ø 1.09529, x@7D Ø 0.0273105<<<

In[15]:= NMinimize@8f, cons<, varsD êê Timing

NMinimize::incst : NMinimize was unable to generate any initial points satisfying the inequality constraints
3.1 x@2D0.5 x@6D1ê3 1.3 x@2D x@6D 0.8 x@3D x@6D2
:-1 + + + § 0, á4à, -1 + á4à § 0>.
x@1D x@4D2 x@5D x@1D0.5 x@3D x@5D x@4D x@5D
The initial region specified may not contain any feasible points. Changing the
initial region or specifying explicit initial points may provide a better solution. à

NMinimize::incst : NMinimize was unable to generate any initial points satisfying the inequality constraints
3.1 x@2D0.5 x@6D1ê3 1.3 x@2D x@6D 0.8 x@3D x@6D2
:-1 + + + § 0, á4à, -1 + á4à § 0>.
x@1D x@4D2 x@5D x@1D0.5 x@3D x@5D x@4D x@5D
The initial region specified may not contain any feasible points. Changing the
initial region or specifying explicit initial points may provide a better solution. à
Out[15]= 88.151, 8911.881, 8x@1D Ø 3.89625, x@2D Ø 0.809359, x@3D Ø 2.66439,
x@4D Ø 4.30091, x@5D Ø 0.853555, x@6D Ø 1.09529, x@7D Ø 0.0273105<<<
Constrained Optimization 71

Constrained Optimization in
Mathematica~References
[1] Mehrotra, S. "On the Implementation of a Primal-Dual Interior Point Method." SIAM Journal
on Optimization 2 (1992): 575|601.

[2] Nelder, J.A. and R. Mead. "A Simplex Method for Function Minimization." The Computer
Journal 7 (1965): 308|313.

[3] Ingber, L. "Simulated Annealing: Practice versus Theory." Mathematical Computer Modelling
18, no. 11 (1993): 29|57.

[4] Price, K. and R. Storn. "Differential Evolution." Dr. Dobb's Journal 264 (1997): 18|24.

You might also like