C++ Direct Searches

Liz Dolan, Adam Gurson, Anne Shepherd, Chris Siefert, Virginia Torczon, and Amy Yates

The software posted here is part of an ongoing project to develop C++ class-based implementations of direct search methods. Liz Dolan's Pattern Searches and Adam Gurson's Simplex Searches were originally developed as part of the honors program in Computer Science under the direction of Virginia Torczon.

The DirectSearch class brings these two classes of searches together under a single abstract base class. The code was recast to allow for a more uniform public interface, more ease of maintenance, and improved readability of the source code. External documentation has also been provided in the form of a design document. and a user's manual; class documentation, as generated by Doc++, is also available. This work was done by Anne Shepherd as part of Computer Science 710 (Research Project), under Dr. Torczon's direction.

Christopher Siefert has implemented and provided useful C++ classes for vector and matrix operations, which have since been incorporated in our search software.

DirectSearch grew from Pattern Searches and Simplex Searches discussed in Liz's and Adam's honors theses. For a full discussion of their original implementation and the results of preliminary experimentation, see Pattern Search Behavior in Nonlinear Optimization (for Liz's Pattern Searches), and Simplex Search Behavior in Nonlinear Optimization (for Adam's Simplex Searches). Two additional searches were added to Liz's and Adam's originals: MultiCompassSearch, written by Chris Siefert, which is a multistart version of Liz's CompassSearch; and Anne Shepherd's HybridNMSearch, which uses a Nelder-Mead search to begin the optimization process, then switches to an EdHJSearch when the standard-deviation stopping criterion is met. For more information about these, see the DirectSearch design document and user's manual.

For functions written in C or Fortran, wrappers have been constructed to allow the user to access these direct search classes with little effort. Instructions are given separately for C wrappers and Fortran wrappers.

We thank the National Science Foundation for support received under Grant No. CCR-9734044.

If you want the whole DirectSearch tarball, including everything listed below, download it by clicking here:



Makefile for all [Makefile]

DirectSearch abstract base class . . .

[DirectSearch.h] [DirectSearch.cc]


PatternSearch abstract base class . . . [PatternSearch.h] [PatternSearch.cc]
CompassSearch class . . . [CompassSearch.h] [CompassSearch.cc]
MultiCompassSearch class . . . [MultiCompassSearch.h] [MultiCompassSearch.cc]
CoordinateSearch class . . . [CoordinateSearch.h] [CoordinateSearch.cc]
EdHJSearch class . . . [EdHJSearch.h] [EdHJSearch.cc]
HJSearch class . . . [HJSearch.h] [HJSearch.cc]
NLessSearch class . . . [NLessSearch.h] [NLessSearch.cc]


SimplexSearch abstract base class . . . [SimplexSearch.h] [SimplexSearch.cc]
NMSearch class . . . [NMSearch.h] [NMSearch.cc]
Hybrid_NMSearch class . . . [Hybrid_NMSearch.h] [Hybrid_NMSearch.cc]
SHHSearch class . . . [SHHSearch.h] [SHHSearch.cc]
SMDSearch class . . . [SMDSearch.h] [SMDSearch.cc]


Container classes. . . [vec.h] [cppmat.h]
Allocator class . . . [Dyn_alloc.h]
*Required by all of the searches.

Sample objective file

objective files . . . [objective.h] [objective.cc]

Sample main programs

sample main programs . . . [main_default.cc] [main_obj.cc] [main_spec.cc] [main_arb.cc] [main_eval.cc] [main_hy.cc] [main_fail.cc]
bits and pieces used in the sample programs . . . [trigclass.h] [trigclass.cc] [shekel.cc] [standalone.cc] [arbitrary.dat]