/*-------------------------------------------------------------------------------------*/ /* NOMAD - Nonlinear Optimization by Mesh Adaptive Direct search - version 3.6.1 */ /* */ /* Copyright (C) 2001-2012 Mark Abramson - the Boeing Company, Seattle */ /* Charles Audet - Ecole Polytechnique, Montreal */ /* Gilles Couture - Ecole Polytechnique, Montreal */ /* John Dennis - Rice University, Houston */ /* Sebastien Le Digabel - Ecole Polytechnique, Montreal */ /* Christophe Tribes - Ecole Polytechnique, Montreal */ /* */ /* funded in part by AFOSR and Exxon Mobil */ /* */ /* Author: Sebastien Le Digabel */ /* */ /* Contact information: */ /* Ecole Polytechnique de Montreal - GERAD */ /* C.P. 6079, Succ. Centre-ville, Montreal (Quebec) H3C 3A7 Canada */ /* e-mail: nomad@gerad.ca */ /* phone : 1-514-340-6053 #6928 */ /* fax : 1-514-340-5665 */ /* */ /* This program is free software: you can redistribute it and/or modify it under the */ /* terms of the GNU Lesser General Public License as published by the Free Software */ /* Foundation, either version 3 of the License, or (at your option) any later */ /* version. */ /* */ /* This program is distributed in the hope that it will be useful, but WITHOUT ANY */ /* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A */ /* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public License along */ /* with this program. If not, see . */ /* */ /* You can find information on the NOMAD software at www.gerad.ca/nomad */ /*-------------------------------------------------------------------------------------*/ /** \file TGP_Output_Model.hpp \brief TGP (Bayesian treed Gaussian process) model for one output (headers) \author Sebastien Le Digabel \date 2011-02-07 \see TGP_Output_Model.cpp */ #ifdef USE_TGP #ifndef __TGP_OUTPUT_MODEL__ #define __TGP_OUTPUT_MODEL__ #include "Eval_Point.hpp" #include "tgp.h" /*------------------------------*/ /* TGP C functions prototypes */ /*------------------------------*/ extern "C" { unsigned long three2lstate ( int * state ); void * newRNGstate ( unsigned long s ); void deleteRNGstate ( void * seed ); unsigned int * GetImprovRank ( int, int, double **, int, int, double * ); } namespace NOMAD { // NOMAD-TGP callback function (called regularly by TGP). // void TGP_callback ( bool & TGP_interrupt ); // SLD -- 2012-09-04 /// TGP models for one output. class TGP_Output_Model : private NOMAD::Uncopyable { private: const NOMAD::Display & _out; ///< Display. int _p; ///< Number of interpolation points. double * _Z; ///< Output vector (size = \c p). double _Z_scaling[2]; ///< To scale/unscale \c Z. bool _Z_is_scaled; ///< If \c Z is scaled or not. bool _is_binary; ///< If the output has only two values. NOMAD::Point _bin_values; ///< Binary output values. bool _is_fixed; ///< Only one output value saved in \c bin_values[0]. void * _tgp_state; ///< RNG (random number generator). Model * _tgp_model; ///< The TGP model. Temper * _tgp_its; ///< Importance tempering object. static double _ditemps[7]; ///< Importance tempering parameters. static bool _force_quit; ///< Flag equal to \c true if ctrl-c is pressed. /// Treat binary output. /** \param ZZ Output vector -- \b IN/OUT. \param nout Size of output -- \b IN. */ void treat_binary_output ( double * ZZ , int nout ) const; /// Scale member \c _Z. void scale_Z ( void ); /// Unscale member \c _Z. void unscale_Z ( void ); /// Scale an output \c Z. /** \param Z Output to scale -- \b IN/OUT. \param n Size of output -- \b IN. */ void scale_Z ( double * Z , int n ) const; /// Unscale an output \c Z. /** \param Z Output to unscale -- \b IN/OUT. \param n Size of output -- \b IN. */ void unscale_Z ( double * Z , int n ) const; public: /// Constructor. /** \param X_pts Interpolation points with output values -- \b IN. \param bbo_index Output index -- \b IN. \param seed Random seed (\c 0 to have the same \c R results) -- \b IN. \param out Display object -- \b IN. */ explicit TGP_Output_Model ( const std::list & X_pts , int bbo_index , int seed , const NOMAD::Display & out ); /// Destructor. virtual ~TGP_Output_Model ( void ); /// Force quit (called by pressing ctrl-c). static void force_quit ( void ) { NOMAD::TGP_Output_Model::_force_quit = true; } /// Access to the \c force_quit flag. /** \return The \c force_quit flag. */ static bool get_force_quit ( void ) { return NOMAD::TGP_Output_Model::_force_quit; } /// Compute the model. /** \param X \c X matrix (\c X_pts \c x \c n): interpolation pts -- \b IN. \param XX \c XX matrix (\c n_XX \c x \c n): prediction points -- \b IN. \param Xsplit \x Xsplit matrix (\c X plus \c XX) -- \b IN. \param n Dimension and number of columns of the matrices -- \b IN. \param n_XX Number of rows of \c XX -- \b IN. \param nsplit Number of rows of \c Xsplit (\c X_pts \c + \c n_XX) -- \b IN. \param tgp_params TGP parameters -- \b IN. \param tgp_rect TGP rectangle -- \b IN. \param tgp_BTE TGP \c B,\c T, and \c R parameters -- \b IN. \param tgp_linburn TGP \c linburn parameter -- \b IN. \param tgp_verb TGP \c verb parameter -- \b IN. \param ZZ \c ZZ vector (size \c n_XX): prediction values -- \b OUT. \param Ds2x Expected reduction in predictive var (size \c n_XX) -- \b OUT. \param improv Expected improvement of the obj. (size \c n_XX) -- \b OUT. */ void compute ( double ** X , double ** XX , double ** Xsplit , int n , int n_XX , int nsplit , Params * tgp_params , double ** tgp_rect , int * tgp_BTE , bool tgp_linburn , bool tgp_verb , double * ZZ , double * Ds2x , int * improv ); /// Prediction at one point. /** \param XX \c XX matrix (\c n_XX \c x \c n): prediction points -- \b IN. \param n Dimension and number of columns of the matrices -- \b IN. \param ZZ \c ZZ vector (size \c n_XX): prediction values -- \b OUT. \param tgp_rect TGP rectangle -- \b IN. \return A boolean equal to \c true if the prediction went well. */ bool predict ( double * XX , int n , double & ZZ , double ** tgp_rect ) const; /// Access to \c Z. /** \return The \c Z vector. */ const double * get_Z ( void ) const { return _Z; } /// Access to the \c fixed flag. /** \return The \c fixed flag. */ bool is_fixed ( void ) const { return _is_fixed; } /// Access to the \c binary flag. /** \return The \c binary flag. */ bool is_binary ( void ) const { return _is_binary; } /// Default display. void display ( void ) { display ( _out ); } /// Display. /** \param out Display -- \b IN. */ void display ( const NOMAD::Display & out ) const; }; /// Display a NOMAD::TGP_Output_Model object. /** \param out The NOMAD::Display object -- \b IN. \param s The NOMAD::TGP_Output_Model object to be displayed -- \b IN. \return The NOMAD::Display object. */ inline const NOMAD::Display & operator << ( const NOMAD::Display & out , const NOMAD::TGP_Output_Model & s ) { s.display ( out ); return out; } } #endif #endif