Main page

Skinny

An algorithm for constrained derivative-free problems

Complete tables of the tests and all versions are available here.

Download and compilation

  • Download the source code from GitHub. The published version is available in tag 'paper' here.
  • Modify the file toyprob.f90 to solve the desirable problem.
  • Generate the executable by typing
    make eng-toyprob

We provide within the file skinny.f90 a simple implementation of the compass search which can be used both in the restoration and in the minimization phases.
The code is prepared for the use of a good variety of algorithms. In the restoration phase it is possible to use Algencan. In the minimization phase it is possible to use: compass search (built in), Nelder-Mead, BOBYQA and also DFO. Some minor changes have to be made in each external code in order to guarantee the good behavior of Skinny.

Using Algencan
  1. Download the distribution of Algencan. Unpack it, enter in the directory and modify the following line of the file Makefile:
    FC := gfortran-4.2
  2. Type
    make
    An error will occur (gcc: no input files), but the necessary files will be generated.
  3. Go to 'sources/algencan' and type
    ar cr libalgencan.a *.o
    ranlib libalgencan.a
  4. Download Skinny's source code and unpack it.
  5. Copy the file libalgencan.a to the directory containing Skinny.
  6. Modify the file toyprob.f90 to solve the desirable problem. Algencan will use the derivatives of the constraints.
  7. Edit the following files:
    • skinny.f90: parameter SK_RESTTYPE = 1.
    • restoration.f90: uncomment the pieces described inside the file. Uncomment the subroutines evalfc, evalgjac and evalhl.
    • Makefile: put libalgencan.a in the variable PCLIBS.
  8. Generate the executable by typing
    make eng-toyprob
    If you do not want to see Algencan's output, put the file .silent in the same place where you are executing Skinny.
Using DFO
  1. DFO needs Algencan to restore infeasible points. Follow the steps 1-3 above to create libalgencan.a.
  2. Download DFO, unpack it, enter in the directory and modify the following line of the file Makefile:

    F77 := gfortran-4.2

  3. To avoid name conflicts between DFO and Algencan, substitute SCL by DFOSCL and UNSCL by DFOUNSCL in the files dfo.f, ptinit.f, impmod.f and dfosolv.f.
  4. Type
    make dfo.o dfosolv.o ptinit.o nbuild.o evalnp.o mbuild.o fd.o gterms.o funcon.o zero.o mvalue.o impmod.o xgnew.o getnp.o funmer.o ptrepl.o ptexch.o nextnp.o ranlux.o
    ar ruv libdfo.a dfo.o dfosolv.o ptinit.o nbuild.o evalnp.o mbuild.o fd.o gterms.o funcon.o zero.o mvalue.o impmod.o xgnew.o getnp.o funmer.o ptrepl.o ptexch.o nextnp.o ranlux.o
    ranlib libdfo.a
  5. Download Skinny's source code and unpack it.
  6. Copy the previously generated files libdfo.a and libalgencan.a to the directory containing Skinny.
  7. Put the file dfo_model_inc.f into the directory containing Skinny.
  8. Modify the file toyprob.f90 to solve the desirable problem. DFO and Algencan will use the derivatives of the constraints.
  9. Substitute files skinny.f90 and Makefile by: skinny.f90 and Makefile.
  10. DFO uses LAPACK and BLAS subroutines. Be sure that LIBLAPACK and LIBBLAS in Makefile point to the correct place.
  11. Generate the executable by typing
    make eng-toyprob
    If you do not want to see Algencan's output, put the file .silent in the same place where you are executing Skinny.

Last modified: May 2018