Scheduler
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
polynomialNetwork.cpp
Go to the documentation of this file.
1 
10 #include "polynomialNetwork.h"
11 
12 #include <iostream>
13 #include <stdexcept>
14 
15 #include <mdp/context.h>
16 
17 using namespace Mdp;
18 
19 
20 PolynomialNetwork::PolynomialNetwork(std::shared_ptr<Context> context, size_t I, size_t O, size_t H)
21  : ApproximatedFunction(I, O, H*(I + O + 1))
22  , hiddenSize(H)
23  , hiddenLayer(std::vector<double>(H))
24  , inputWeights(std::vector<std::vector<double>>(I+1, std::vector<double>(H, 0.0)))
25  ,outputWeights(std::vector<std::vector<double>>(H, std::vector<double>(O, 0.0)))
26 {
27  inputSize++; //to account for the constant factor
28  init(context);
29 }
30 
31 void PolynomialNetwork::init(std::shared_ptr<Context> /*context*/)
32 {
33 }
34 
35 std::vector<double> PolynomialNetwork::getParamVector()
36 {
37  /*TODO*/
38  return std::vector<double>();
39 }
40 
42 {
43  /*TODO*/
44  return;
45 }
46 
47 
48 void PolynomialNetwork::initializeWeights(std::vector<std::vector<double>> in,
49  std::vector<std::vector<double>> out)
50 {
51  inputWeights = in;
52  outputWeights = out;
53 }
54 
55 std::vector<double> PolynomialNetwork::getOutput(std::vector<double> input)
56 {
57  input.push_back(1.0); //constant input
58  hiddenLayer[0] = 1.0;
59  for (size_t h = 1; h < hiddenSize; h++)
60  {
61  double sum = 0.0;
62  for (size_t i = 0; i < inputSize; i++)
63  {
64  sum += input[i] * inputWeights[i][h];
65  }
66  double monome = 1;
67  for (size_t e = 0; e < h; e++)
68  {
69  monome *= sum;
70  }
71  hiddenLayer[h] = monome;
72  }
73  std::vector<double> out = std::vector<double>(outputSize, 0.0);
74  for (size_t o = 0; o < outputSize; o++)
75  {
76  for (size_t h = 0; h < hiddenSize; h++)
77  {
78  out[o] += hiddenLayer[h] * outputWeights[h][o];
79  std::cerr << "o: " << o << " h: " << h << "outputweights: " << outputWeights[h][o] <<"\n";
80  }
81  }
82  return out;
83 }
84 
85 
86 
87 void PolynomialNetwork::learnExample(std::vector<double> /*input*/, std::vector<double> /*output*/)
88 {
89  /*TODO*/
90  /*double rate = 0.1;*/
91 }
92 
93 
94 
95 
97 {
98  /*TODO*/
99  throw std::logic_error("not implemented yet");
100 }
101 
102 
103 std::vector<double> PolynomialNetwork::getValues(state_t /*s*/)
104 {
105  /*TODO*/
106  throw std::logic_error("not implemented yet");
107 }
108 
109 
110 void PolynomialNetwork::setAlpha(double /*alpha*/)
111 {
112  /*TODO*/
113  throw std::logic_error("not implemented yet");
114 }
void initializeWeights(std::vector< std::vector< double >> inputWeights, std::vector< std::vector< double >> outputWeights)
void setAlpha(double alpha)
double getValue(state_t s, action_t a)
std::vector< std::vector< double > > outputWeights
void learnExample(std::vector< double > input, std::vector< double > output) override
std::vector< double > hiddenLayer
std::vector< double > getValues(state_t s)
std::vector< double > getParamVector() override
PolynomialNetwork(std::shared_ptr< Context > context, size_t inputSize, size_t outputSize, size_t nbOfHiddenLayers)
size_t action_t
Definition: action_impl.h:18
void updateParameters(double coeff)
Definition: action.h:18
std::vector< double > getOutput(std::vector< double > input) override
size_t state_t
Definition: state.h:19
void init(std::shared_ptr< Context > context)
std::vector< std::vector< double > > inputWeights