| [66cfc7] | 1 | /* | 
|---|
|  | 2 | * FunctionModel.hpp | 
|---|
|  | 3 | * | 
|---|
|  | 4 | *  Created on: 02.10.2012 | 
|---|
|  | 5 | *      Author: heber | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #ifndef FUNCTIONMODEL_HPP_ | 
|---|
|  | 9 | #define FUNCTIONMODEL_HPP_ | 
|---|
|  | 10 |  | 
|---|
|  | 11 | // include config.h | 
|---|
|  | 12 | #ifdef HAVE_CONFIG_H | 
|---|
|  | 13 | #include <config.h> | 
|---|
|  | 14 | #endif | 
|---|
|  | 15 |  | 
|---|
| [7b019a] | 16 | #include <boost/function.hpp> | 
|---|
| [66cfc7] | 17 | #include <vector> | 
|---|
|  | 18 |  | 
|---|
|  | 19 | #include "FunctionApproximation/FunctionArgument.hpp" | 
|---|
|  | 20 |  | 
|---|
| [7b019a] | 21 | class Fragment; | 
|---|
| [d52819] | 22 | class TrainingData; | 
|---|
| [7b019a] | 23 |  | 
|---|
| [66cfc7] | 24 | /** This class represents the interface for a given function to model a | 
|---|
|  | 25 | * high-dimensional data set in FunctionApproximation. | 
|---|
|  | 26 | * | 
|---|
|  | 27 | * As the parameters may be stored differently, the interface functions for | 
|---|
|  | 28 | * getting and setting them are as light-weight (and not speed-optimized) | 
|---|
|  | 29 | * as possible. | 
|---|
|  | 30 | * | 
|---|
|  | 31 | */ | 
|---|
|  | 32 | class FunctionModel | 
|---|
|  | 33 | { | 
|---|
|  | 34 | public: | 
|---|
|  | 35 | //!> typedef for a single parameter degree of freedom of the function | 
|---|
|  | 36 | typedef double parameter_t; | 
|---|
|  | 37 | //!> typedef for the whole set of parameters of the function | 
|---|
|  | 38 | typedef std::vector<parameter_t> parameters_t; | 
|---|
|  | 39 | //!> typedef for the argument vector as input to the function | 
|---|
|  | 40 | typedef std::vector<argument_t> arguments_t; | 
|---|
|  | 41 | //!> typedef for a single result degree of freedom | 
|---|
|  | 42 | typedef double result_t; | 
|---|
|  | 43 | //!> typedef for the result vector as returned by the function | 
|---|
|  | 44 | typedef std::vector<result_t> results_t; | 
|---|
| [7b019a] | 45 | //!> typedef for a function containing how to extract required information from a Fragment. | 
|---|
|  | 46 | typedef boost::function< arguments_t (const Fragment &, const size_t)> extractor_t; | 
|---|
| [e36ba2] | 47 | //!> typedef for the magic triple function that gets the other two distances for a given argument | 
|---|
|  | 48 | typedef boost::function< std::vector<arguments_t>(const argument_t &, const double)> triplefunction_t; | 
|---|
| [7b019a] | 49 |  | 
|---|
| [66cfc7] | 50 | public: | 
|---|
|  | 51 | FunctionModel() {} | 
|---|
|  | 52 | virtual ~FunctionModel() {} | 
|---|
|  | 53 |  | 
|---|
|  | 54 | /** Setter for the parameters of the model function. | 
|---|
|  | 55 | * | 
|---|
|  | 56 | * \param params set of parameters to set | 
|---|
|  | 57 | */ | 
|---|
|  | 58 | virtual void setParameters(const parameters_t ¶ms)=0; | 
|---|
|  | 59 |  | 
|---|
|  | 60 | /** Getter for the parameters of this model function. | 
|---|
|  | 61 | * | 
|---|
|  | 62 | * \return current set of parameters of the model function | 
|---|
|  | 63 | */ | 
|---|
|  | 64 | virtual parameters_t getParameters() const=0; | 
|---|
|  | 65 |  | 
|---|
| [d52819] | 66 | /** Sets the parameter randomly within the sensible range of each parameter. | 
|---|
|  | 67 | * | 
|---|
|  | 68 | * \param data container with training data for guesstimating range | 
|---|
|  | 69 | */ | 
|---|
|  | 70 | virtual void setParametersToRandomInitialValues(const TrainingData &data)=0; | 
|---|
| [7b019a] | 71 |  | 
|---|
| [66cfc7] | 72 | /** Getter for the number of parameters of this model function. | 
|---|
|  | 73 | * | 
|---|
|  | 74 | * \return number of parameters | 
|---|
|  | 75 | */ | 
|---|
|  | 76 | virtual size_t getParameterDimension() const=0; | 
|---|
|  | 77 |  | 
|---|
| [e36ba2] | 78 | /** Sets the magic triple function that we use for getting angle distances. | 
|---|
|  | 79 | * | 
|---|
|  | 80 | * @param _triplefunction function that returns a list of triples (i.e. the | 
|---|
|  | 81 | *        two remaining distances) to a given pair of points (contained as | 
|---|
|  | 82 | *        indices within the argument) | 
|---|
|  | 83 | */ | 
|---|
|  | 84 | virtual void setTriplefunction(triplefunction_t &_triplefunction) | 
|---|
|  | 85 | {} | 
|---|
|  | 86 |  | 
|---|
| [66cfc7] | 87 | /** Evaluates the function with the given \a arguments and the current set of | 
|---|
|  | 88 | * parameters. | 
|---|
|  | 89 | * | 
|---|
|  | 90 | * \param arguments set of arguments as input variables to the function | 
|---|
|  | 91 | * \return result of the function | 
|---|
|  | 92 | */ | 
|---|
|  | 93 | virtual results_t operator()(const arguments_t &arguments) const=0; | 
|---|
|  | 94 |  | 
|---|
|  | 95 | /** Evaluates the derivative of the function with the given \a arguments | 
|---|
| [3ccea3] | 96 | * with respect to a specific parameter indicated by \a index. | 
|---|
| [66cfc7] | 97 | * | 
|---|
|  | 98 | * \param arguments set of arguments as input variables to the function | 
|---|
| [3ccea3] | 99 | * \param index derivative of which parameter | 
|---|
|  | 100 | * \return result vector containing the derivative with respect to the given | 
|---|
|  | 101 | *         input | 
|---|
| [66cfc7] | 102 | */ | 
|---|
| [3ccea3] | 103 | virtual results_t parameter_derivative(const arguments_t &arguments, const size_t index) const=0; | 
|---|
| [d03292] | 104 |  | 
|---|
|  | 105 | /** States whether lower and upper boundaries should be used to constraint | 
|---|
|  | 106 | * the parameter search for this function model. | 
|---|
|  | 107 | * | 
|---|
|  | 108 | * \return true - constraints should be used, false - else | 
|---|
|  | 109 | */ | 
|---|
|  | 110 | virtual bool isBoxConstraint() const=0; | 
|---|
|  | 111 |  | 
|---|
|  | 112 | /** Returns a vector which are the lower boundaries for each parameter_t | 
|---|
|  | 113 | * of this FunctionModel. | 
|---|
|  | 114 | * | 
|---|
|  | 115 | * \return vector of parameter_t resembling lowest allowed values | 
|---|
|  | 116 | */ | 
|---|
|  | 117 | virtual parameters_t getLowerBoxConstraints() const=0; | 
|---|
|  | 118 |  | 
|---|
|  | 119 | /** Returns a vector which are the upper boundaries for each parameter_t | 
|---|
|  | 120 | * of this FunctionModel. | 
|---|
|  | 121 | * | 
|---|
|  | 122 | * \return vector of parameter_t resembling highest allowed values | 
|---|
|  | 123 | */ | 
|---|
|  | 124 | virtual parameters_t getUpperBoxConstraints() const=0; | 
|---|
| [7b019a] | 125 |  | 
|---|
|  | 126 | /** Returns a bound function to be used with TrainingData, extracting distances | 
|---|
|  | 127 | * from a Fragment. | 
|---|
|  | 128 | * | 
|---|
|  | 129 | * \return bound function extracting distances from a fragment | 
|---|
|  | 130 | */ | 
|---|
| [da2d5c] | 131 | virtual extractor_t getFragmentSpecificExtractor() const=0; | 
|---|
| [66cfc7] | 132 | }; | 
|---|
|  | 133 |  | 
|---|
|  | 134 | #endif /* FUNCTIONMODEL_HPP_ */ | 
|---|