The StoGO program is an implementation of a new algorithm for global optimization described in [MZ98]. To download the program click here.
Unpack the optimization package with the commands
gunzip stogo.tar.gz
and tar -xvf stogo.tar
.
StoGO is written in C++ and if you have GNU C++ version 2.8.1 or later
you should be able to simply type gmake
followed by ./prog
to run the test examples.
StoGO uses some features of the Standard Template Library (STL). This
means that your compiler must support STL.
Click
here for a list of STL-Compatible compilers.
The program has been tested with GNU C++ 2.8.1 on AIX and Linux platforms
together with KAI C++ 3.2.f on an AIX platform. The Makefile assumes that
you have GNU C++.
The file config.h allows the user to enable/disable various features in StoGO. These features are described in detail in [Gud98]. The program is split into several files:
The user must supply information about the domain, the objective function and it's gradient (or an estimate of the gradient). As an example how this is done consider the Rosenbrock function
defined on . In StoGO this problem is defined as follows (see rosen.h)
#include "linalg.h" #include "tools.h" #include "config.h" void Domain_Rosenbrock(RTBox box) { box.lb=-10.0 ; box.ub=10.0; } double Objective_Rosenbrock(RCRVector x) { double a=x(1)-x(0)*x(0); double b=1-x(0); return 100*a*a + b*b; } void Gradient_Rosenbrock(RCRVector x, RCRVector grad) { grad(0)=200*(x(1)-x(0)*x(0))*(-2*x(0))-2*(1-x(0)); grad(1)=200*(x(1)-x(0)*x(0)); }
An example driver routine is found in testros.cc
#include "global.h" #include "tools.h" #include "rosen.h" int main() { int dim=2; Pdom Dom=Domain_Rosenbrock; Pobj Obj=Objective_Rosenbrock; Pgrad Grad=Gradient_Rosenbrock; GlobalParams params; params.det_pnts=2*dim+1; params.rnd_pnts=0; params.eps_cl=0.1; params.rshift=0.3; params.mu=1.0E-4; params.maxtime=5; TBox D(dim); Dom(D); Global Problem(D,Obj, Grad, params); RVector dummyvec(dim); Problem.Search(-1, dummyvec); cout << "Minimizers found\n"; Problem.DispMinimizers(); }
(To compile change prog.o
to testros.o
in the Makefile).
The following comment is intended for those who who want to use
random sample points in the global search: StoGO uses the rand()
function to generate the random points. In order to avoid getting
the same sequence of random numbers each time the program is run,
you should initialize the seed, e.g. with some system timer.
This should be done at the beginning of the Search
function
in global.cc.