From 173802e9f8d98a01019d3f5aff055f1f04479974 Mon Sep 17 00:00:00 2001 From: Gard Spreemann Date: Thu, 2 Feb 2017 21:23:01 +0100 Subject: upstream/3.0+dfsg.3: Start git repository for package by importing upstream's 3.0 tarball DFSG-cleaned as currently used in published Debian package. --- README | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 README (limited to 'README') diff --git a/README b/README new file mode 100644 index 0000000..dc040e6 --- /dev/null +++ b/README @@ -0,0 +1,232 @@ + +L-BFGS-B is released under the “New BSD License” (aka “Modified BSD License” or +“3-clause license”) +Please read attached file License.txt + + L-BFGS-B (version 3.0) march, 2011 + +This directory contains the modified/corrected limited memory +code for solving bound constrained optimization problems. + +_______________________________________________________________________ + + o f77 routines + + blas.f subset of blas + linpack.f subset of linpack + lbfgsb.f main routine + timer.f routine to compute CPU time + + o f77 and f90 drivers + + driver1.f driver1.f90 + driver2.f driver2.f90 + driver3.f driver3.f90 + + We recommend that the user read driver1.f/driver1.f90, which + give a good idea of how the code works + + o Makefile Linux/Unix users. + + To run the code on a Linux/Unix machine simply type + + make + + This will create the files + + x.lbfgsb_77_1 x.lbfgsb_90_1 + x.lbfgsb_77_2 x.lbfgsb_90_2 + x.lbfgsb_77_3 x.lbfgsb_90_3 + + which are the executable files for the drivers in the package. + One can execute the program by typing the name of the executable + file. + + o Output files are provided for each executable file in directory + OUPUTS + + output_77_1 output_90_1 + output_77_2 output_90_2 + output_77_3 output_90_3 + + o The following four articles are also included + + [1] algorithm.pdf - describes the algorithm + [2] compact.pdf - presents the compact form of matrices + [3] code.pdf - describes the code + [4] acm-remark.pdf - describes the modification/correction + + The most useful articles for those who only wish to use the code + are [3,4]. Users interested in understanding the algorithm should + read [1] and possibly also [2]. + +________________________________________________________________________ + +For questions and help contact + + Jorge Nocedal + Jose Luis Morales +________________________________________________________________________ + + + How to use L-BFGS-B + +************************************************************************ + + The simplest way to use the code is to modify one of the +drivers provided in the package. Most users will only need to make +a few changes to the drivers to run their applications. + + L-BFGS-B is written in FORTRAN 77, in double precision. The +user is required to calculate the function value f and its gradient g. +In order to allow the user complete control over these computations, +reverse communication is used. The routine setulb.f must be called +repeatedly under the control of the variable task. The calling +statement of L-BFGS-B is + + call setulb(n,m,x,l,u,nbd,f,g,factr,pgtol,wa,iwa,task,iprint, + + csave,lsave,isave,dsave) + + + Following is a description of all the parameters used in this call. + +c n is an INTEGER variable that must be set by the user to the +c number of variables. It is not altered by the routine. +c +c m is an INTEGER variable that must be set by the user to the +c number of corrections used in the limited memory matrix. +c It is not altered by the routine. Values of m < 3 are +c not recommended, and large values of m can result in excessive +c computing time. The range 3 <= m <= 20 is recommended. +c +c x is a DOUBLE PRECISION array of length n. On initial entry +c it must be set by the user to the values of the initial +c estimate of the solution vector. Upon successful exit, it +c contains the values of the variables at the best point +c found (usually an approximate solution). +c +c l is a DOUBLE PRECISION array of length n that must be set by +c the user to the values of the lower bounds on the variables. If +c the i-th variable has no lower bound, l(i) need not be defined. +c +c u is a DOUBLE PRECISION array of length n that must be set by +c the user to the values of the upper bounds on the variables. If +c the i-th variable has no upper bound, u(i) need not be defined. +c +c nbd is an INTEGER array of dimension n that must be set by the +c user to the type of bounds imposed on the variables: +c nbd(i)=0 if x(i) is unbounded, +c 1 if x(i) has only a lower bound, +c 2 if x(i) has both lower and upper bounds, +c 3 if x(i) has only an upper bound. +c +c f is a DOUBLE PRECISION variable. If the routine setulb returns +c with task(1:2)= 'FG', then f must be set by the user to +c contain the value of the function at the point x. +c +c g is a DOUBLE PRECISION array of length n. If the routine setulb +c returns with taskb(1:2)= 'FG', then g must be set by the user to +c contain the components of the gradient at the point x. +c +c factr is a DOUBLE PRECISION variable that must be set by the user. +c It is a tolerance in the termination test for the algorithm. +c The iteration will stop when +c +c (f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr*epsmch +c +c where epsmch is the machine precision which is automatically +c generated by the code. Typical values for factr on a computer +c with 15 digits of accuracy in double precision are: +c factr=1.d+12 for low accuracy; +c 1.d+7 for moderate accuracy; +c 1.d+1 for extremely high accuracy. +c The user can suppress this termination test by setting factr=0. +c +c pgtol is a double precision variable. +c On entry pgtol >= 0 is specified by the user. The iteration +c will stop when +c +c max{|proj g_i | i = 1, ..., n} <= pgtol +c +c where pg_i is the ith component of the projected gradient. +c The user can suppress this termination test by setting pgtol=0. +c +c wa is a DOUBLE PRECISION array of length +c (2mmax + 5)nmax + 11mmax^2 + 8mmax used as workspace. +c This array must not be altered by the user. +c +c iwa is an INTEGER array of length 3nmax used as +c workspace. This array must not be altered by the user. +c +c task is a CHARACTER string of length 60. +c On first entry, it must be set to 'START'. +c On a return with task(1:2)='FG', the user must evaluate the +c function f and gradient g at the returned value of x. +c On a return with task(1:5)='NEW_X', an iteration of the +c algorithm has concluded, and f and g contain f(x) and g(x) +c respectively. The user can decide whether to continue or stop +c the iteration. +c When +c task(1:4)='CONV', the termination test in L-BFGS-B has been +c satisfied; +c task(1:4)='ABNO', the routine has terminated abnormally +c without being able to satisfy the termination conditions, +c x contains the best approximation found, +c f and g contain f(x) and g(x) respectively; +c task(1:5)='ERROR', the routine has detected an error in the +c input parameters; +c On exit with task = 'CONV', 'ABNO' or 'ERROR', the variable task +c contains additional information that the user can print. +c This array should not be altered unless the user wants to +c stop the run for some reason. See driver2 or driver3 +c for a detailed explanation on how to stop the run +c by assigning task(1:4)='STOP' in the driver. +c +c iprint is an INTEGER variable that must be set by the user. +c It controls the frequency and type of output generated: +c iprint<0 no output is generated; +c iprint=0 print only one line at the last iteration; +c 0100 print details of every iteration including x and g; +c When iprint > 0, the file iterate.dat will be created to +c summarize the iteration. +c +c csave is a CHARACTER working array of length 60. +c +c lsave is a LOGICAL working array of dimension 4. +c On exit with task = 'NEW_X', the following information is +c available: +c lsave(1) = .true. the initial x did not satisfy the bounds; +c lsave(2) = .true. the problem contains bounds; +c lsave(3) = .true. each variable has upper and lower bounds. +c +c isave is an INTEGER working array of dimension 44. +c On exit with task = 'NEW_X', it contains information that +c the user may want to access: +c isave(30) = the current iteration number; +c isave(34) = the total number of function and gradient +c evaluations; +c isave(36) = the number of function value or gradient +c evaluations in the current iteration; +c isave(38) = the number of free variables in the current +c iteration; +c isave(39) = the number of active constraints at the current +c iteration; +c +c see the subroutine setulb.f for a description of other +c information contained in isave +c +c dsave is a DOUBLE PRECISION working array of dimension 29. +c On exit with task = 'NEW_X', it contains information that +c the user may want to access: +c dsave(2) = the value of f at the previous iteration; +c dsave(5) = the machine precision epsmch generated by the code; +c dsave(13) = the infinity norm of the projected gradient; +c +c see the subroutine setulb.f for a description of other +c information contained in dsave +c +************************************************************************ + -- cgit v1.2.3