-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGEPNet.cpp
90 lines (68 loc) · 1.47 KB
/
GEPNet.cpp
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#ifndef NEURALNET
#define NEURALNET
#include <iostream>
#include <cmath>
#include "GEPNet.hpp"
GEPNet::GEPNet( Neuron *rt, Neuron **inps, int num_inputs )
{
inputs = NULL;
setInputs( inps, num_inputs );
root = rt;
should_delete = true;
}
GEPNet::~GEPNet()
{
if( should_delete )
{
if( !root->isInput() )
delete root;
}
if( inputs != NULL )
{
delete [] inputs;
}
}
double GEPNet::evaluate()
{
return root->evaluate();
}
double GEPNet::evaluate( double *ivalues )
{
for( int i = 0; i < num_inputs; i++ )
inputs[i]->setValue( ivalues[i] );
return evaluate();
}
void GEPNet::setInputs( Neuron **inps, int num_inputs )
{
this->num_inputs = num_inputs;
inputs = new Neuron*[num_inputs];
for( int i = 0; i < num_inputs; i++ )
inputs[i] = inps[i];
}
Neuron* GEPNet::getRoot()
{
return root;
}
// Multiple Input, Multiple Output Feed-Forward Neural Network
MIMO_FF_GEPNet::MIMO_FF_GEPNet( CfgFile& cfg, GEPNet **in_nets )
{
config = &cfg;
// NETWORKS
nets = new GEPNet*[config->number_of_outputs];
for( int i = 0; i < config->number_of_outputs; i++ )
nets[i] = in_nets[i];
// OUTPUTS
outputs = new double[config->number_of_outputs];
}
MIMO_FF_GEPNet::~MIMO_FF_GEPNet()
{
delete [] nets;
delete [] outputs;
}
const double* MIMO_FF_GEPNet::evaluate( double *ivalues )
{
for( int i = 0; i < config->number_of_outputs; i++ )
outputs[i] = nets[i]->evaluate( ivalues );
return (const double*)outputs;
}
#endif