# Bayesian-Optimization / include / kernels / kernel_polynomial.hpp

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68``` ```/* ------------------------------------------------------------------------- This file is part of BayesOpt, an efficient C++ library for Bayesian optimization. Copyright (C) 2011-2014 Ruben Martinez-Cantin BayesOpt is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. BayesOpt 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 General Public License for more details. You should have received a copy of the GNU General Public License along with BayesOpt. If not, see . ------------------------------------------------------------------------ */ #ifndef _KERNEL_POLYNOMIAL_HPP_ #define _KERNEL_POLYNOMIAL_HPP_ #include "kernels/kernel_atomic.hpp" namespace bayesopt { /**\addtogroup KernelFunctions */ //@{ /** Polynomial covariance function*/ class Polynomial: public AtomicKernel { public: Polynomial(){ mExp = 1; }; void init(size_t input_dim) { n_params = 2; n_inputs = input_dim; }; double operator()( const vectord &x1, const vectord &x2) { double xx = boost::numeric::ublas::inner_prod(x1,x2); return params(0)*params(0) * std::pow((params(1)+xx),static_cast(mExp)); }; //TODO: double gradient( const vectord &x1, const vectord &x2, size_t component) { assert(false); return 0.0; }; protected: size_t mExp; }; class Polynomial2: public Polynomial { public: Polynomial2(){ mExp = 2;};}; class Polynomial3: public Polynomial { public: Polynomial3(){ mExp = 3;};}; class Polynomial4: public Polynomial { public: Polynomial4(){ mExp = 4;};}; class Polynomial5: public Polynomial { public: Polynomial5(){ mExp = 5;};}; class Polynomial6: public Polynomial { public: Polynomial6(){ mExp = 6;};}; class Polynomial7: public Polynomial { public: Polynomial7(){ mExp = 7;};}; //@} } //namespace bayesopt #endif ```