summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/brain/bias_node.cpp6
-rw-r--r--src/brain/neural_link.cpp11
-rw-r--r--src/brain/neural_network.cpp4
-rw-r--r--src/brain/neural_node.cpp6
-rw-r--r--src/brain/neuron.cpp24
-rw-r--r--src/brain/sensor.cpp5
6 files changed, 54 insertions, 2 deletions
diff --git a/src/brain/bias_node.cpp b/src/brain/bias_node.cpp
new file mode 100644
index 0000000..99ae70d
--- /dev/null
+++ b/src/brain/bias_node.cpp
@@ -0,0 +1,6 @@
+#include "brain/bias_node.h"
+
+BiasNode::BiasNode()
+ :NeuralNode('b', 0)
+{
+}
diff --git a/src/brain/neural_link.cpp b/src/brain/neural_link.cpp
new file mode 100644
index 0000000..d217236
--- /dev/null
+++ b/src/brain/neural_link.cpp
@@ -0,0 +1,11 @@
+#include "brain/neural_link.h"
+
+NeuralLink::NeuralLink(double weight)
+ :_weight(weight)
+{
+}
+
+double NeuralLink::weightedActivation() const
+{
+ return _input->activation()*_weight;
+}
diff --git a/src/brain/neural_network.cpp b/src/brain/neural_network.cpp
index 980d5bc..c3e9f33 100644
--- a/src/brain/neural_network.cpp
+++ b/src/brain/neural_network.cpp
@@ -5,11 +5,11 @@ NeuralNetwork::NeuralNetwork(std::istream &&networkConfigFile, int numberOfSenso
{
for (int i=0; i<numberOfSensors; ++i)
{
- _sensors.push_back(std::make_shared<Sensor>());
+ _sensors.push_back(std::make_shared<Sensor>(i));
}
for (int i=0; i<numberOfOutputs; ++i)
{
- _outputs.push_back(std::make_shared<Neuron>());
+ _outputs.push_back(std::make_shared<Neuron>(i));
}
}
diff --git a/src/brain/neural_node.cpp b/src/brain/neural_node.cpp
new file mode 100644
index 0000000..9bdd7c6
--- /dev/null
+++ b/src/brain/neural_node.cpp
@@ -0,0 +1,6 @@
+#include "brain/neural_node.h"
+
+NeuralNode::NeuralNode(char type, int id)
+ :_type(type), _id(id)
+{
+}
diff --git a/src/brain/neuron.cpp b/src/brain/neuron.cpp
new file mode 100644
index 0000000..8c2e47c
--- /dev/null
+++ b/src/brain/neuron.cpp
@@ -0,0 +1,24 @@
+#include "brain/neuron.h"
+#include <cmath>
+
+Neuron::Neuron(int id)
+ :NeuralNode('n', id)
+{
+}
+
+double Neuron::sigmoid(double input) const
+{
+ double slope = 4.924273;
+ double constant = 2.4621365;
+ return (1/(1+(std::exp(-(slope*input)))));
+}
+
+double Neuron::activation() const
+{
+ double activationSum = 0;
+ for (auto link : _inputLinks)
+ {
+ activationSum += link->weightedActivation();
+ }
+ return sigmoid(activationSum);
+}
diff --git a/src/brain/sensor.cpp b/src/brain/sensor.cpp
new file mode 100644
index 0000000..3069659
--- /dev/null
+++ b/src/brain/sensor.cpp
@@ -0,0 +1,5 @@
+#include "brain/sensor.h"
+
+Sensor::Sensor(int id)
+ :NeuralNode('s', id)
+{}