Newer
Older

Michal Kravcenko
committed
/**
* DESCRIPTION OF THE CLASS
*
* @author Martin Beseda
* @author Martin Mrovec
* @author Michal Kravčenko
* @date 2017 - 2018
*/
#ifndef NEURON_H_
#define NEURON_H_

Michal Kravcenko
committed
#include <vector>
#include "../NetConnection/Connection.h"
class Connection;
/**
* Abstract class representing a general neuron
*/
class Neuron{
/**
* Inner potential of the neuron (input of the activation function)
*/
double potential = 0.0;
/**
* State of the neuron (output of the activation function)
*/
double state = 0.0;
/**
* array of the activation function parameters
*/
double *activation_function_parameters = nullptr;
/**
* Number of parameters of the activation function
*/
int n_activation_function_parameters = 0;

Michal Kravcenko
committed
/**
* Keeps track of the number of saturated INCOMING connections
*/
int n_saturated_connections_in = 0;
/**
* Keeps track of the number of saturated OUTGOING connections
*/
int n_saturated_connections_out = 0;

Michal Kravcenko
committed
/**
* A pointer to a vector containing pointers to incoming connections
*/
std::vector<Connection*> *edges_in = nullptr;
/**
* A pointer to a vector containing pointers to outgoing connections
*/
std::vector<Connection*> *edges_out = nullptr;
public:
/**
* Destructor of the Neuron object
* this level deallocates the array 'activation_function_parameters'

Michal Kravcenko
committed
* also deallocates the OUTGOING connections
*/
virtual ~Neuron();
/**
* Performs the activation function and stores the result into the 'state' property
*/
virtual void activate( ) = 0;

Michal Kravcenko
committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**
* Sets the number of saturated INPUT connections to the prescribed value
* @param[in] value The number of saturated INCOMING connections
*/
virtual void set_saturation_in(int value) final;
/**
* Increases the saturation counter of the INCOMING connections by the specified amount
* @param value Amount to be added to the counter
*/
virtual void adjust_saturation_in(int value) final;
/**
* Returns true if the neuron is saturated via the INCOMING connections
* @return true/false
*/
virtual bool is_saturated_in() final;
/**
* Returns true if the neuron is saturated via the OUTGOING connections
* @return true/false
*/
virtual bool is_saturated_out() final;
/**
* Sets the number of saturated OUTPUT connections to the prescribed value
* @param[in] value The number of saturated OUTGOING connections
*/
virtual void set_saturation_out(int value) final;
/**
* Increases the saturation counter of the OUTGOING connections by the specified amount
* @param value Amount to be added to the counter
*/
virtual void adjust_saturation_out(int value) final;
/**
* Adds the input signal value to the current potential
* @param[in] input_signal Input value
*/
virtual void adjust_potential(double input_signal);
/**
* Getter to the 'potential' property
* @return Value of the neuron's potential (real number)
*/
virtual double get_potential();
/**
* Setter to the 'potential' property
* @param[in] value Value of the neuron's potential (real number)
*/
virtual void set_potential(double value);
/**
* Getter to the 'state' property
* @return Value of the current neuron's state
*/
virtual double get_state();
/**
* Setter to the 'state' component
* @param[in] value Value of the current neuron's state
*/
virtual void set_state(double value);
/**
* Returns the number of parameters the activation function relies on
* @return Number of the parameters
*/
virtual int activation_function_get_n_parameters();
/**
* Calculates the partial derivative of the activation function
* with respect to the parameter and the current potential
* @param[in] param_idx Index of the parameter to calculate derivative of
* @return Partial derivative of the activation function according to the
* 'param_idx'-th parameter
*/
virtual double activation_function_get_partial_derivative(int param_idx) = 0;
/**
* Calculates the derivative with respect to the argument, ie the 'potential'
* @return f'(x), where 'f(x)' is the activation function and 'x' = 'potential'
*/
virtual double activation_function_get_derivative( ) = 0;
/**
* Adjusts the parameter with index 'param_idx' of the activation function
* by the value prescribed by 'value'
* @param[in] param_idx Index of the parameter to be adjusted
* @param[in] value Value of the adjustment
*/
virtual void activation_function_adjust_parameter(int param_idx, double value);
/**
* Sets the parameter with index 'param_idx' of the activation function
* to the value prescribed by 'value'
* @param[in] param_idx
* @param[in] value
*/
virtual void activation_function_set_parameter(int param_idx, double value);
/**
* Gets the parameter with index 'param_idx' of the activation function
* @param[in] param_idx
*/
virtual double activation_function_get_parameter(int param_idx);

Michal Kravcenko
committed
/**
* Adds a new incoming connection with this neuron as its end-point
* @param[in] con Incoming connection
*/
virtual void add_connection_in(Connection *con) final;
/**
* Adds a new outgoing connection with this neuron as its source-point
* @param[in] con Outgoing connection
*/
virtual void add_connection_out(Connection *con) final;
/**
* Returns the pointer to the incoming connection vector
* @return
*/
virtual std::vector<Connection*>* get_connections_in( ) final;
/**
* Returns the pointer to the outgoing connection vector
* @return
*/
virtual std::vector<Connection*>* get_connections_out( ) final;
}; /* end of Neuron class */
#endif /* NEURON_H_ */