libradialfunctions.cpp
1 /********************************************************************************
2  * Neural Network Framework. *
3  * Copyright (C) 2005-2011 Gianluca Massera <emmegian@yahoo.it> *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the Free Software *
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
18  ********************************************************************************/
19 
20 #include "libradialfunctions.h"
21 
22 namespace farsa {
23 
24 GaussFunction::GaussFunction( double centre, double variance, double maxvalue )
25  : OutputFunction() {
26  this->centre = centre;
27  this->variancev = variance;
28  msqrvar = -( variancev*variancev );
29  this->max = maxvalue;
30 }
31 
32 bool GaussFunction::setVariance( double v ) {
33  variancev = v;
34  msqrvar = -( variancev*variancev );
35  return true;
36 }
37 
39  return variancev;
40 }
41 
42 void GaussFunction::apply( DoubleVector& inputs, DoubleVector& outputs ) {
43  // --- out <- max * exp( (centre-inputs)^2 / -(variance^2) )
44  for( int i=0; i<inputs.size(); i++ ) {
45  double diffsqr = (centre-inputs[i])*(centre-inputs[i]);
46  outputs[i] = max * exp( diffsqr / msqrvar );
47  }
48 }
49 
50 bool GaussFunction::derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const {
51  // --- d <- ( 2.0*(centre-x) / variance^2 ) * y
52  for( int i=0; i<x.size(); i++ ) {
53  d[i] = ( 2.0*(centre-x[i]) / (variancev*variancev) )*y[i];
54  }
55  return true;
56 }
57 
59 {
60  centre = 0.0;
61  QString str = params.getValue(prefix + "centre");
62  if (!str.isEmpty()) {
63  bool ok;
64  centre = str.toDouble(&ok);
65  if (!ok) {
66  centre = 0.0;
67  }
68  }
69 
70  variancev = 1.0;
71  str = params.getValue(prefix + "variance");
72  if (!str.isEmpty()) {
73  bool ok;
74  variancev = str.toDouble(&ok);
75  if (!ok) {
76  variancev = 1.0;
77  }
78  }
79  // Also recomputing minus squared variance
80  msqrvar = -( variancev*variancev );
81 
82  max = 1.0;
83  str = params.getValue(prefix + "max");
84  if (!str.isEmpty()) {
85  bool ok;
86  max = str.toDouble(&ok);
87  if (!ok) {
88  max = 1.0;
89  }
90  }
91 }
92 
93 void GaussFunction::save(ConfigurationParameters& params, QString prefix)
94 {
95  params.startObjectParameters(prefix, "GaussFunction", this);
96  params.createParameter(prefix, "centre", QString::number(centre));
97  params.createParameter(prefix, "variance", QString::number(variancev));
98  params.createParameter(prefix, "max", QString::number(max));
99 }
100 
101 }
double max
Maximum value of GaussFunction.
OutputFunction Class.
GaussFunction(double centre=0.0, double variance=1.0, double maxvaule=1.0)
Construct.
virtual bool derivate(const DoubleVector &x, const DoubleVector &y, DoubleVector &d) const
derivate of Gauss function
bool setVariance(double v)
Set the Variance.
virtual void apply(DoubleVector &inputs, DoubleVector &outputs)
Implement the Gaussian function.
double centre
Centre of GaussFunction.
Library of Radial OutputFunction.
double variance()
Return the variance.
bool startObjectParameters(QString groupPath, QString typeName, ParameterSettable *object)
QString getValue(QString path, bool alsoMatchParents=false) const
virtual void configure(ConfigurationParameters &params, QString prefix)
Configures the object using a ConfigurationParameters object.
virtual void save(ConfigurationParameters &params, QString prefix)
Save the actual status of parameters into the ConfigurationParameters object passed.
void createParameter(QString groupPath, QString parameter)