StoGO: A Program for Global Optimization

The StoGO program is an implementation of a new algorithm for global optimization described in [MZ98]. To download the program click here.

Installation

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++.

A short description of the program

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:

tabular20

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

displaymath49

defined on tex2html_wrap_inline51 . 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.

References

Gud98
Gudmundsson, S. Parallel Global Optimization, M.Sc. Thesis, IMM, Technical University of Denmark, 1998.

MZ98
Madsen, K, Zertchaninov, S. and Zilinskas, A. Global Optimization using Branch-and-Bound, Submitted to the Journal of Global Optimization, 1998.




Please report problems to steinng@hotmail.com