A Local and Parallel Computation Toolbox for Gaussian Process Regression (GPLP)
    for GNU Octave 3.2.x and Matlab 7.7.x

Copyright (c) by Chiwoo Park, 2011-09-16.


0) HOW TO READ
==============

If you want to get started without further delay, then read section 1) below
and jump right to the examples in doc/user_manual.pdf.



1) ABOUT THESE PROGRAMS
=======================

This collection of matlab programs implements the following methods described in 
a) Chen, T. and J. Ren (2009). Bagging for Gaussian process regression.
   Neurocomputing 72 (7-9), 1605-1610.
b) Park, C., J. Z. Huang, and Y. Ding (2011). Domain decomposition ap-
   proach for fast gaussian process regression of large spatial data sets.
   Journal of Machine Learning Research 12, 1697-1728.
c) Snelson, E. and Z. Ghahramani (2007). Local and global sparse Gaussian
   process approximations. In International Conference on Artifical Intel-
   ligence and Statistics 11, pp. 524-531. Society for Artificial Intelligence
   and Statistics.
d) Urtasun, R. and T. Darrell (2008). Sparse probabilistic regression for
   activity-independent human pose inference. In IEEE Conference on
   Computer Vision and Pattern Recognition 2008, pp. 1-8. IEEE.

The root directory contains all demo files and data files necessary for execut-
ing the demo files. There are 10 subdirectories:

./doc : directory contains this documentation.

./cov : directory contains all source files defining the covariance functions
				for Gaussian process; this folder is simply a copy of the covariance
				function implementations provided as a part of the early version of
				GPML.

./mesh : directory contains all source files defining the partitioning schemes
				 that decompose the large input data into a number of small chunks
				 for localized computation.

./ddm : directory contains all source files that implement the sequential
				computation version of the domain decomposition method.

./pddm-multicore : directory contains all source files that implement the parallel ver-
			             sion of the domain decomposition method using Matlab Parallel
		               Computing Toolbox.

./pddm-multinode : directory contains all source files that implement the parallel version
									 of the domain decomposition method using MatMPI.

./pic : directory contains all source files that implement the partial inde-
				pendent conditional.

./bpg : directory contains all source files that implement the bagging for
				Gaussian process regression.

./lpr : directory contains all source files that implement the localized prob-
			  abilistic regression.

./etc : directory contains the sample configuration files necessary for set-
			  ting up the computation environment with GPLP.

2) ABOUT MEX FILES
==================

Some of the programs make use of the MEX facility in matlab for more efficient
implementation. eight mex files in ./mesh, ./cov, and ./etc/kdtree sub-directories. 
If you are using Matlab, please check a list of the compilers that support 
the mex-compilation before executing the following commands in Matlab prompts:

   + If you are using Matlab 7.12.0 or later versions:
     >> mex -outdir ./mesh ./mesh/dist.c
     >> mex -outdir ./cov ./cov/sq_dist.c

   + If you are NOT using Matlab 7.12.0 or later versions:
     >> mex -outdir ./mesh ./mesh/dist.c
     >> mex -outdir ./cov ./cov/sq_dist.c
     >> mex -outdir ./etc/kdtree ./etc/kdtree/kdtree_ball_query.cpp
     >> mex -outdir ./etc/kdtree ./etc/kdtree/kdtree_build.cpp
     >> mex -outdir ./etc/kdtree ./etc/kdtree/kdtree_delete.cpp
     >> mex -outdir ./etc/kdtree ./etc/kdtree/kdtree_k_nearest_neighbors.cpp 
     >> mex -outdir ./etc/kdtree ./etc/kdtree/kdtree_nearest_neighbor.cpp
     >> mex -outdir ./etc/kdtree ./etc/kdtree/kdtree_range_query.cpp

The first two commands are the same for using all versions of Matlab.  But when 
using a version of Matlab earlier than 7.12.0, you need to compile six additional 
mex files, which are a part of the KD tree implementation. In Matlab 7.12.0 or 
later versions, Matlab provides the built-in kdtree package for our use so that 
compiling these mex files is no longer needed. In our testing, the Visual Studio 2008 
produced a complied version of the kdtree package to work with Matlab 7.7.0. It might 
work with other versions of Visual Studio and Matlab, but we have not tested it. For 
the details of installing Visual Studio 2008, please see 

        http://msdn.microsoft.com/en-us/library/ms246609(v=VS.90).aspx. 


Please use the following commands in Octave prompts:

octave-3.2.4.exe:1> mkoctfile --mex ./mesh/dist.c
octave-3.2.4.exe:2> mkoctfile --mex ./cov/sq_dist.c
octave-3.2.4.exe:2> mkoctfile --mex ./etc/kdtree/kdtree_ball_query.cpp
octave-3.2.4.exe:2> mkoctfile --mex ./etc/kdtree/kdtree_build.cpp
octave-3.2.4.exe:2> mkoctfile --mex ./etc/kdtree/kdtree_delete.cpp
octave-3.2.4.exe:2> mkoctfile --mex ./etc/kdtree/kdtree_k_nearest_neighbors.cpp
octave-3.2.4.exe:2> mkoctfile --mex ./etc/kdtree/kdtree_nearest_neighbor.cpp
octave-3.2.4.exe:2> mkoctfile --mex ./etc/kdtree/kdtree_range_query.cpp

If the mex-compile is successful, the files having `.o' and `.mex' file exten-
sions (for Octave ), or `.mexw32' or `.mexw64' file extension (for Matlab )
will be generated. You might see some warnings during the compilation
but you can ignore the warnings.

If you do not have any compiler for the mex files, please refer to the link at
http://www.mathworks.com/support/compilers/previous_releases.html.

3) PARALLEL COMPUTATION
=======================
The GPLP contains the two parallel computation versions of the following method:

   Park, C., J. Z. Huang, and Y. Ding (2011). Domain decomposition ap-
   proach for fast gaussian process regression of large spatial data sets.
   Journal of Machine Learning Research 12, 1697-1728.

If you want to execute the parallel versions, you need to set up your system en-
vironment as described in Section 2.2 of the user manual at doc/user_manual.pdf.    

4) CURRENT VERSION
==================

The current version of the programs is 1.0, which is the first version of GPLP. 
