
				 OptimPack
			       (version 1.3)
			     by Eric Thibaut


  This  is   OptimPack,  a  C  library  for   optimization.   This  version
  implements:
  
    - inexact line search (see ref. [1]);
  
    - limited memory BFGS (variable metric) possibly with bound constraints
      and/or preconditioning;
  
  In order  to make  embedding OptimPack into  another language as  easy as
  possible,  the routines  use reverse  communication: all  local variables
  needed  by the  optimization  routines get  saved  into workspace  arrays
  provided by  the caller and  the optimization routines  never explicitely
  call the penalty function to optimize.

  Most of the documention is in the header file "optimpack.h".
  
  Directory  idl contains  an implementation  of OptimPack  support  in IDL
  (using CALL_EXTERNAL).
  
  Directory  yorick  contains an  implementation  of  OptimPack support  in
  Yorick.


REFERENCES

  [1]  Jorge J. Mor  and David  J. Thuente,  "Line search  algorithms with
      guaranteed sufficient  decrease" in ACM  Transactions on Mathematical
      Software (TOMS) Volume 20, Issue 3, Pages 286-307 (September 1994).


INSTALLATION

  1. Edit the Makefile (see "Portability Issues" below).

  2. Compile the library:

     make

  3. Optionaly install the software, for instance:

        make PREFIX=/usr/local install

     which will copy:

       liboptimpack.a into /usr/local/lib
       optimpack.h    into /usr/local/include

     and  creates  directory  /usr/local/doc/OptimPack-$VERSION  with  some
     documentation and legal stuff.


YORICK INSTALLATION

  1. Go to directory "yorick".

  2. Edit the very first part of Makefile whether you want or don't want
     support for LBFGS and LBFGSB algorithms.

  3. Setup for compilation and compile the plugin code:

     yorick -batch make.i
     make clean
     make

  4. Optionaly install plugin in Yorick tree:

     make install 


PORTABILITY ISSUES

  OptimPack is  written in  standard ANSI-C and  should pose no  problem of
  portability.   However, in order  to match  the data  types used  in your
  software, you may have to set the values of the following macros:
  
    OP_INTEGER = data type used to store array indices
    OP_LOGICAL = data type of the result of a logical test
  
  This must be  done _before_ "optimpack.h" get included.   If these macros
  are not defined, the default assumed in "optimpack.h" is:
  
    OP_INTEGER = int
    OP_LOGICAL = int
  
  For instance, one should write:
  
    #define OP_INTEGER long
    #define OP_LOGICAL int
    #include "optimpack.h"
    ...
  
  Of course, the  installed OptimPack library must have  been compiled with
  the correct  data types.  Another  possibility is to define  these macros
  when calling CPP (the C preprocessor) e.g. in Makefile:
  
     CPPFLAGS = -DOP_INTEGER=long -DOP_LOGICAL=int -I.
  
  a final  possibility is to edit  "optimpack.h" and to  adjust the default
  values of these macros (at the very beginning of this file).  If you plan
  to install in your system, the best is probably to fix the definitions in
  "optimpack.h", then  compile the library and finally  install the library
  and the header file "optimpack.h" in proper system directories (e.g. with
  "make install PREFIX=...").
