Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.core
comparison libs/commons-math-2.1/docs/userguide/optimization.html @ 10:5f2c5fb36e93
commons-math-2.1 added
author | dwinter |
---|---|
date | Tue, 04 Jan 2011 10:00:53 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
9:e63a64652f4d | 10:5f2c5fb36e93 |
---|---|
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 <html xmlns="http://www.w3.org/1999/xhtml"> | |
14 <head> | |
15 <title>Math - The Commons Math User Guide - Optimization</title> | |
16 <style type="text/css" media="all"> | |
17 @import url("../css/maven-base.css"); | |
18 @import url("../css/maven-theme.css"); | |
19 @import url("../css/site.css"); | |
20 </style> | |
21 <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> | |
22 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> | |
23 </head> | |
24 <body class="composite"> | |
25 <div id="banner"> | |
26 <span id="bannerLeft"> | |
27 | |
28 Commons Math User Guide | |
29 | |
30 </span> | |
31 <div class="clear"> | |
32 <hr/> | |
33 </div> | |
34 </div> | |
35 <div id="breadcrumbs"> | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 <div class="xright"> | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 </div> | |
53 <div class="clear"> | |
54 <hr/> | |
55 </div> | |
56 </div> | |
57 <div id="leftColumn"> | |
58 <div id="navcolumn"> | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 <h5>User Guide</h5> | |
68 <ul> | |
69 | |
70 <li class="none"> | |
71 <a href="../userguide/index.html">Contents</a> | |
72 </li> | |
73 | |
74 <li class="none"> | |
75 <a href="../userguide/overview.html">Overview</a> | |
76 </li> | |
77 | |
78 <li class="none"> | |
79 <a href="../userguide/stat.html">Statistics</a> | |
80 </li> | |
81 | |
82 <li class="none"> | |
83 <a href="../userguide/random.html">Data Generation</a> | |
84 </li> | |
85 | |
86 <li class="none"> | |
87 <a href="../userguide/linear.html">Linear Algebra</a> | |
88 </li> | |
89 | |
90 <li class="none"> | |
91 <a href="../userguide/analysis.html">Numerical Analysis</a> | |
92 </li> | |
93 | |
94 <li class="none"> | |
95 <a href="../userguide/special.html">Special Functions</a> | |
96 </li> | |
97 | |
98 <li class="none"> | |
99 <a href="../userguide/utilities.html">Utilities</a> | |
100 </li> | |
101 | |
102 <li class="none"> | |
103 <a href="../userguide/complex.html">Complex Numbers</a> | |
104 </li> | |
105 | |
106 <li class="none"> | |
107 <a href="../userguide/distribution.html">Distributions</a> | |
108 </li> | |
109 | |
110 <li class="none"> | |
111 <a href="../userguide/fraction.html">Fractions</a> | |
112 </li> | |
113 | |
114 <li class="none"> | |
115 <a href="../userguide/transform.html">Transform Methods</a> | |
116 </li> | |
117 | |
118 <li class="none"> | |
119 <a href="../userguide/geometry.html">3D Geometry</a> | |
120 </li> | |
121 | |
122 <li class="none"> | |
123 <strong>Optimization</strong> | |
124 </li> | |
125 | |
126 <li class="none"> | |
127 <a href="../userguide/ode.html">Ordinary Differential Equations</a> | |
128 </li> | |
129 | |
130 <li class="none"> | |
131 <a href="../userguide/genetics.html">Genetic Algorithms</a> | |
132 </li> | |
133 </ul> | |
134 <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> | |
135 <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> | |
136 </a> | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 </div> | |
146 </div> | |
147 <div id="bodyColumn"> | |
148 <div id="contentBox"> | |
149 <div class="section"><h2><a name="a12_Optimization"></a>12 Optimization</h2> | |
150 <div class="section"><h3><a name="a12.1_Overview"></a>12.1 Overview</h3> | |
151 <p> | |
152 The optimization package provides algorithms to optimize (i.e. either minimize | |
153 or maximize) some objective or cost function. The package is split in several | |
154 sub-packages dedicated to different kind of functions or algorithms. | |
155 <ul><li>the univariate package handles univariate scalar functions,</li> | |
156 <li>the linear package handles multivariate vector linear functions | |
157 with linear constraints,</li> | |
158 <li>the direct package handles multivariate scalar functions | |
159 using direct search methods (i.e. not using derivatives),</li> | |
160 <li>the general package handles multivariate scalar or vector functions | |
161 using derivatives.</li> | |
162 <li>the fitting package handles curve fitting by univariate real functions</li> | |
163 </ul> | |
164 </p> | |
165 <p> | |
166 The top level optimization package provides common interfaces for the optimization | |
167 algorithms provided in sub-packages. The main interfaces defines defines optimizers | |
168 and convergence checkers. The functions that are optimized by the algorithms provided | |
169 by this package and its sub-packages are a subset of the one defined in the | |
170 <code>analysis</code> package, namely the real and vector valued functions. These | |
171 functions are called objective function here. When the goal is to minimize, the | |
172 functions are often called cost function, this name is not used in this package. | |
173 </p> | |
174 <p> | |
175 The type of goal, i.e. minimization or maximization, is defined by the enumerated | |
176 <a href="../apidocs/org/apache/commons/math/optimization/GoalType.html"> | |
177 GoalType</a> which has only two values: <code>MAXIMIZE</code> and <code>MINIMIZE</code>. | |
178 </p> | |
179 <p> | |
180 Optimizers are the algorithms that will either minimize or maximize, the objective | |
181 function by changing its input variables set until an optimal set is found. There | |
182 are only four interfaces defining the common behavior of optimizers, one for each | |
183 supported type of objective function: | |
184 <ul><li><a href="../apidocs/org/apache/commons/math/optimization/UnivariateRealOptimizer.html"> | |
185 UnivariateRealOptimizer</a> for <a href="../apidocs/org/apache/commons/math/analysis/UnivariateRealFunction.html"> | |
186 univariate real functions</a></li> | |
187 <li><a href="../apidocs/org/apache/commons/math/optimization/MultivariateRealOptimizer.html"> | |
188 MultivariateRealOptimizer</a> for <a href="../apidocs/org/apache/commons/math/analysis/MultivariateRealFunction.html"> | |
189 multivariate real functions</a></li> | |
190 <li><a href="../apidocs/org/apache/commons/math/optimization/DifferentiableMultivariateRealOptimizer.html"> | |
191 DifferentiableMultivariateRealOptimizer</a> for <a href="../apidocs/org/apache/commons/math/analysis/DifferentiableMultivariateRealFunction.html"> | |
192 differentiable multivariate real functions</a></li> | |
193 <li><a href="../apidocs/org/apache/commons/math/optimization/DifferentiableMultivariateVectorialOptimizer.html"> | |
194 DifferentiableMultivariateVectorialOptimizer</a> for <a href="../apidocs/org/apache/commons/math/analysis/DifferentiableMultivariateVectorialFunction.html"> | |
195 differentiable multivariate vectorial functions</a></li> | |
196 </ul> | |
197 </p> | |
198 <p> | |
199 Despite there are only four types of supported optimizers, it is possible to optimize | |
200 a transform a <a href="../apidocs/org/apache/commons/math/analysis/MultivariateVectorialFunction.html"> | |
201 non-differentiable multivariate vectorial function</a> by converting it to a <a href="../apidocs/org/apache/commons/math/analysis/MultivariateRealFunction.html"> | |
202 non-differentiable multivariate real function</a> thanks to the <a href="../apidocs/org/apache/commons/math/optimization/LeastSquaresConverter.html"> | |
203 LeastSquaresConverter</a> helper class. The transformed function can be optimized using | |
204 any implementation of the <a href="../apidocs/org/apache/commons/math/optimization/MultivariateRealOptimizer.html"> | |
205 MultivariateRealOptimizer</a> interface. | |
206 </p> | |
207 <p> | |
208 For each of the four types of supported optimizers, there is a special implementation | |
209 which wraps a classical optimizer in order to add it a multi-start feature. This feature | |
210 call the underlying optimizer several times in sequence with different starting points | |
211 and returns the best optimum found or all optima if desired. This is a classical way to | |
212 prevent being trapped into a local extremum when looking for a global one. | |
213 </p> | |
214 </div> | |
215 <div class="section"><h3><a name="a12.2_Univariate_Functions"></a>12.2 Univariate Functions</h3> | |
216 <p> | |
217 A <a href="../apidocs/org/apache/commons/math/optimization/UnivariateRealOptimizer.html"> | |
218 UnivariateRealOptimizer</a> is used to find the minimal values of a univariate real-valued | |
219 function <code>f</code>. | |
220 </p> | |
221 <p> | |
222 These algorithms usage is very similar to root-finding algorithms usage explained | |
223 in the analysis package. The main difference is that the <code>solve</code> methods in root | |
224 finding algorithms is replaced by <code>optimize</code> methods. | |
225 </p> | |
226 </div> | |
227 <div class="section"><h3><a name="a12.3_Linear_Programming"></a>12.3 Linear Programming</h3> | |
228 <p> | |
229 This package provides an implementation of George Dantzig's simplex algorithm | |
230 for solving linear optimization problems with linear equality and inequality | |
231 constraints. | |
232 </p> | |
233 </div> | |
234 <div class="section"><h3><a name="a12.4_Direct_Methods"></a>12.4 Direct Methods</h3> | |
235 <p> | |
236 Direct search methods only use cost function values, they don't | |
237 need derivatives and don't either try to compute approximation of | |
238 the derivatives. According to a 1996 paper by Margaret H. Wright | |
239 (<a href="http://cm.bell-labs.com/cm/cs/doc/96/4-02.ps.gz" class="externalLink">Direct | |
240 Search Methods: Once Scorned, Now Respectable</a>), they are used | |
241 when either the computation of the derivative is impossible (noisy | |
242 functions, unpredictable discontinuities) or difficult (complexity, | |
243 computation cost). In the first cases, rather than an optimum, a | |
244 <em>not too bad</em> point is desired. In the latter cases, an | |
245 optimum is desired but cannot be reasonably found. In all cases | |
246 direct search methods can be useful. | |
247 </p> | |
248 <p> | |
249 Simplex-based direct search methods are based on comparison of | |
250 the cost function values at the vertices of a simplex (which is a | |
251 set of n+1 points in dimension n) that is updated by the algorithms | |
252 steps. | |
253 </p> | |
254 <p> | |
255 The instances can be built either in single-start or in | |
256 multi-start mode. Multi-start is a traditional way to try to avoid | |
257 being trapped in a local minimum and miss the global minimum of a | |
258 function. It can also be used to verify the convergence of an | |
259 algorithm. In multi-start mode, the <code>minimizes</code>method | |
260 returns the best minimum found after all starts, and the <code>etMinima</code> | |
261 method can be used to retrieve all minima from all starts (including the one | |
262 already provided by the <code>minimizes</code> method). | |
263 </p> | |
264 <p> | |
265 The <code>direct</code> package provides two solvers. The first one is the classical | |
266 <a href="../apidocs/org/apache/commons/math/optimization/direct/NelderMead.html"> | |
267 Nelder-Mead</a> method. The second one is Virginia Torczon's | |
268 <a href="../apidocs/org/apache/commons/math/optimization/direct/MultiDirectional.html"> | |
269 multi-directional</a> method. | |
270 </p> | |
271 </div> | |
272 <div class="section"><h3><a name="a12.5_General_Case"></a>12.5 General Case</h3> | |
273 <p> | |
274 The general package deals with non-linear vectorial optimization problems when | |
275 the partial derivatives of the objective function are available. | |
276 </p> | |
277 <p> | |
278 One important class of estimation problems is weighted least | |
279 squares problems. They basically consist in finding the values | |
280 for some parameters p<sub>k</sub> such that a cost function | |
281 J = sum(w<sub>i</sub>(mes<sub>i</sub> - mod<sub>i</sub>)<sup>2</sup>) is | |
282 minimized. The various (target<sub>i</sub> - model<sub>i</sub>(p<sub>k</sub>)) | |
283 terms are called residuals. They represent the deviation between a set of | |
284 target values target<sub>i</sub> and theoretical values computed from | |
285 models model<sub>i</sub> depending on free parameters p<sub>k</sub>. | |
286 The w<sub>i</sub> factors are weights. One classical use case is when the | |
287 target values are experimental observations or measurements. | |
288 </p> | |
289 <p> | |
290 Solving a least-squares problem is finding the free parameters p<sub>k</sub> | |
291 of the theoretical models such that they are close to the target values, i.e. | |
292 when the residual are small. | |
293 </p> | |
294 <p> | |
295 Two optimizers are available in the general package, both devoted to least-squares | |
296 problems. The first one is based on the <a href="../apidocs/org/apache/commons/math/optimization/general/GaussNewtonOptimizer.html"> | |
297 Gauss-Newton</a> method. The second one is the <a href="../apidocs/org/apache/commons/math/optimization/general/LevenbergMarquardtOptimizer.html"> | |
298 Levenberg-Marquardt</a> method. | |
299 </p> | |
300 <p> | |
301 In order to solve a vectorial optimization problem, the user must provide it as | |
302 an object implementing the <a href="../apidocs/org/apache/commons/math/analysis/DifferentiableMultivariateVectorialFunction.html"> | |
303 DifferentiableMultivariateVectorialFunction</a> interface. The object will be provided to | |
304 the <code>estimate</code> method of the optimizer, along with the target and weight arrays, | |
305 thus allowing the optimizer to compute the residuals at will. The last parameter to the | |
306 <code>estimate</code> method is the point from which the optimizer will start its | |
307 search for the optimal point. | |
308 </p> | |
309 <p> | |
310 In addition to least squares solving, the <a href="../apidocs/org/apache/commons/math/optimization/general/NonLinearConjugateGradientOptimizer.html"> | |
311 NonLinearConjugateGradientOptimizer</a> class provides a non-linear conjugate gradient algorithm | |
312 to optimize <a href="../apidocs/org/apache/commons/math/optimization/DifferentiableMultivariateRealFunction.html"> | |
313 DifferentiableMultivariateRealFunction</a>. Both the Fletcher-Reeves and the Polak-Ribière | |
314 search direction update methods are supported. It is also possible to set up a preconditioner | |
315 or to change the line-search algorithm of the inner loop if desired (the default one is a Brent | |
316 solver). | |
317 </p> | |
318 </div> | |
319 <div class="section"><h3><a name="a12.6_Curve_Fitting"></a>12.6 Curve Fitting</h3> | |
320 <p> | |
321 The fitting package deals with curve fitting for univariate real functions. | |
322 When a univariate real function y = f(x) does depend on some unknown parameters | |
323 p<sub>0</sub>, p<sub>1</sub> ... p<sub>n-1</sub>, curve fitting can be used to | |
324 find these parameters. It does this by <em>fitting</em> the curve so it remains | |
325 very close to a set of observed points (x<sub>0</sub>, y<sub>0</sub>), | |
326 (x<sub>1</sub>, y<sub>1</sub>) ... (x<sub>k-1</sub>, y<sub>k-1</sub>). This | |
327 fitting is done by finding the parameters values that minimizes the objective | |
328 function sum(y<sub>i</sub>-f(x<sub>i</sub>))<sup>2</sup>. This is really a least | |
329 squares problem. | |
330 </p> | |
331 <p> | |
332 For all provided curve fitters, the operating principle is the same. Users must first | |
333 create an instance of the fitter, then add the observed points and once the complete | |
334 sample of observed points has been added they must call the <code>fit</code> method | |
335 which will compute the parameters that best fit the sample. A weight is associated | |
336 with each observed point, this allows to take into account uncertainty on some points | |
337 when they come from loosy measurements for example. If no such information exist and | |
338 all points should be treated the same, it is safe to put 1.0 as the weight for all points. | |
339 </p> | |
340 <p> | |
341 The <a href="../apidocs/org/apache/commons/math/optimization/fitting/CurveFitter.html"> | |
342 CurveFitter</a> class provides curve fitting for general curves. Users must | |
343 provide their own implementation of the curve template as a class implementing | |
344 the <a href="../apidocs/org/apache/commons/math/optimization/fitting/ParametricRealFunction.html"> | |
345 ParametricRealFunction</a> interface and they must provide the initial guess of the | |
346 parameters. The more specialized <a href="../apidocs/org/apache/commons/math/optimization/fitting/PolynomialFitter.html"> | |
347 PolynomialFitter</a> and <a href="../apidocs/org/apache/commons/math/optimization/fitting/HarmonicFitter.html"> | |
348 HarmonicFitter</a> classes require neither an implementation of the parametric real function | |
349 not an initial guess as they are able to compute them by themselves. | |
350 </p> | |
351 <p> | |
352 An example of fitting a polynomial is given here: | |
353 </p> | |
354 <div class="source"><pre>PolynomialFitter fitter = new PolynomialFitter(degree, new LevenbergMarquardtOptimizer()); | |
355 fitter.addObservedPoint(-1.00, 2.021170021833143); | |
356 fitter.addObservedPoint(-0.99 2.221135431136975); | |
357 fitter.addObservedPoint(-0.98 2.09985277659314); | |
358 fitter.addObservedPoint(-0.97 2.0211192647627025); | |
359 // lots of lines ommitted | |
360 fitter.addObservedPoint( 0.99, -2.4345814727089854); | |
361 PolynomialFunction fitted = fitter.fit(); | |
362 </pre> | |
363 </div> | |
364 </div> | |
365 </div> | |
366 | |
367 </div> | |
368 </div> | |
369 <div class="clear"> | |
370 <hr/> | |
371 </div> | |
372 <div id="footer"> | |
373 <div class="xright">© | |
374 2003-2010 | |
375 | |
376 | |
377 | |
378 | |
379 | |
380 | |
381 | |
382 | |
383 | |
384 </div> | |
385 <div class="clear"> | |
386 <hr/> | |
387 </div> | |
388 </div> | |
389 </body> | |
390 </html> |