gsl_vegas Class Template Reference

Multidimensional integration using Vegas Monte Carlo (GSL). More...

#include <gsl_vegas.h>

Inheritance diagram for gsl_vegas:

mcarlo_inte multi_inte

Detailed Description

template<class param_t, class func_t = multi_funct<param_t>, class rng_t = gsl_rnga, class vec_t = ovector_base, class alloc_vec_t = ovector, class alloc_t = ovector_alloc>
class gsl_vegas< param_t, func_t, rng_t, vec_t, alloc_vec_t, alloc_t >

Multidimensional integration using Vegas Monte Carlo (GSL).

The output options are a little different than the original GSL routine. The default setting of mcarlo_inte::verbose is 0, which turns off all output. A verbose value of 1 prints summary information about the weighted average and final result, while a value of 2 also displays the grid coordinates. A value of 3 prints information from the rebinning procedure for each iteration.

Some original documentation from GSL:

      The input coordinates are x[j], with upper and lower limits
      xu[j] and xl[j]. The integration length in the j-th direction is
      delx[j]. Each coordinate x[j] is rescaled to a variable y[j] in
      the range 0 to 1. The range is divided into bins with boundaries
      xi[i][j], where i=0 corresponds to y=0 and i=bins to y=1. The
      grid is refined (ie, bins are adjusted) using d[i][j] which is
      some variation on the squared sum. A third parameter used in
      defining the real coordinate using random numbers is called z.
      It ranges from 0 to bins. Its integer part gives the lower index
      of the bin into which a call is to be placed, and the remainder
      gives the location inside the bin.

      When stratified sampling is used the bins are grouped into
      boxes, and the algorithm allocates an equal number of function
      calls to each box.

      The variable alpha controls how "stiff" the rebinning algorithm
      is. alpha = 0 means never change the grid. Alpha is typically
      set between 1 and 2. 
      

Todo:
Need to double check that the verbose output is good for all settings of verbose.
Todo:
BINS_MAX and bins_max are somehow duplicates. Fix this.
Things to document:
Document the member data more carefully
Idea for future:
Could convert bins and boxes to a more useful structure
Idea for future:
The testing file calls the error handler on the composite_inte section. Fix this.
Based on Lepage78 . The current version of the algorithm was described in the Cornell preprint CLNS-80/447 of March, 1980. The GSL code follows most closely the C version by D. R. Yennie, coded in 1984.

Definition at line 110 of file gsl_vegas.h.


Integration mode (default is mode_importance)

int mode
static const int mode_importance = 1
static const int mode_importance_only = 0
static const int mode_stratified = -1

Public Member Functions

virtual int allocate (size_t ldim)
 Allocate memory.
virtual int free ()
 Free allocated memory.
virtual int vegas_minteg_err (int stage, func_t &func, size_t ndim, const vec_t &xl, const vec_t &xu, param_t &pa, double &res, double &err)
 Integrate function func from x=a to x=b.
virtual int minteg_err (func_t &func, size_t ndim, const vec_t &a, const vec_t &b, param_t &pa, double &res, double &err)
 Integrate function func from x=a to x=b.
virtual double minteg (func_t &func, size_t ndim, const vec_t &a, const vec_t &b, param_t &pa)
 Integrate function func over the hypercube from $ x_i=a_i $ to $ x_i=b_i $ for $ 0<i< $ ndim-1.
virtual const char * type ()
 Return string denoting type ("gsl_vegas").

Data Fields

double result
 Result from last iteration.
double sigma
 Uncertainty from last iteration.
double alpha
 The stiffness of the rebinning algorithm (default 1.5).
unsigned int iterations
 Set the number of iterations (default 5).
double chisq
 The chi-squared per degree of freedom for the weighted estimate of the integral.
std::ostream * outs
 The output stream to send output information (default std::cout).

Protected Member Functions

virtual void init_box_coord (int boxt[])
 Initialize box coordinates.
int change_box_coord (int boxt[])
 Change box coordinates.
virtual void init_grid (const vec_t &xl, const vec_t &xu, size_t ldim)
 Initialize grid.
virtual void reset_grid_values ()
 Reset grid values.
void accumulate_distribution (int lbin[], double y)
 Add the most recently generated result to the distribution.
void random_point (vec_t &lx, int lbin[], double *bin_vol, const int lbox[], const vec_t &xl, const vec_t &xu)
 Generate a random position in a given box.
virtual void resize_grid (unsigned int lbins)
 Resize the grid.
virtual void refine_grid ()
 Refine the grid.
virtual void print_lim (const vec_t &xl, const vec_t &xu, unsigned long ldim)
 Print limits of integration.
virtual void print_head (unsigned long num_dim, unsigned long calls, unsigned int lit_num, unsigned int lbins, unsigned int lboxes)
 Print header.
virtual void print_res (unsigned int itr, double res, double err, double cum_res, double cum_err, double chi_sq)
 Print results.
virtual void print_dist (unsigned long ldim)
 Print distribution.
virtual void print_grid (unsigned long ldim)
 Print grid.

Protected Attributes

size_t dim
size_t bins_max
unsigned int bins
unsigned int boxes
double * xi
double * xin
double * delx
double * weight
double vol
int * bin
int * box
double * d
double jac
double wtd_int_sum
double sum_wgts
double chi_sum
unsigned int it_start
unsigned int it_num
unsigned int samples
unsigned int calls_per_box
alloc_t ao
 Memory allocation object.
alloc_vec_t x
 Point for function evaluation.

Static Protected Attributes

static const int BINS_MAX = 50
 Desc.

Member Function Documentation

void accumulate_distribution ( int  lbin[],
double  y 
) [inline, protected]

Add the most recently generated result to the distribution.

This is among the member functions that is not virtual because it is part of the innermost loop.

Definition at line 264 of file gsl_vegas.h.

int change_box_coord ( int  boxt[]  )  [inline, protected]

Change box coordinates.

Steps through the box coord like {0,0}, {0, 1}, {0, 2}, {0, 3}, {1, 0}, {1, 1}, {1, 2}, ...

This is among the member functions that is not virtual because it is part of the innermost loop.

Definition at line 211 of file gsl_vegas.h.

void random_point ( vec_t &  lx,
int  lbin[],
double *  bin_vol,
const int  lbox[],
const vec_t &  xl,
const vec_t &  xu 
) [inline, protected]

Generate a random position in a given box.

Use the random number generator r to return a random position x in a given box. The value of bin gives the bin location of the random position (there may be several bins within a given box)

This is among the member functions that is not virtual because it is part of the innermost loop.

Definition at line 284 of file gsl_vegas.h.

virtual int vegas_minteg_err ( int  stage,
func_t &  func,
size_t  ndim,
const vec_t &  xl,
const vec_t &  xu,
param_t &  pa,
double &  res,
double &  err 
) [inline, virtual]

Integrate function func from x=a to x=b.

Original documentation from GSL:

Normally, `stage = 0' which begins with a new uniform grid and empty weighted average. Calling vegas with `stage = 1' retains the grid from the previous run but discards the weighted average, so that one can "tune" the grid using a relatively small number of points and then do a large run with `stage = 1' on the optimized grid. Setting `stage = 2' keeps the grid and the weighted average from the previous run, but may increase (or decrease) the number of histogram bins in the grid depending on the number of calls available. Choosing `stage = 3' enters at the main loop, so that nothing is changed, and is equivalent to performing additional iterations in a previous call.

Definition at line 652 of file gsl_vegas.h.


Field Documentation

double alpha

The stiffness of the rebinning algorithm (default 1.5).

This usual range is between 1 and 2.

Definition at line 134 of file gsl_vegas.h.

double chisq

The chi-squared per degree of freedom for the weighted estimate of the integral.

From GSL documentation:

       The value of CHISQ should be close to 1.  A value of CHISQ
       which differs significantly from 1 indicates that the values
       from different iterations are inconsistent.  In this case the
       weighted error will be under-estimated, and further iterations
       of the algorithm are needed to obtain reliable results.
       

Definition at line 152 of file gsl_vegas.h.


The documentation for this class was generated from the following file:

Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.

Project hosting provided by SourceForge.net Logo, O2scl Sourceforge Project Page