summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Worthe <justin.worthe@gmail.com>2015-08-01 14:35:58 +0200
committerJustin Worthe <justin.worthe@gmail.com>2015-08-01 14:35:58 +0200
commit7e8dce7224214cbb82e9191917de9f234fe38cb7 (patch)
tree2ac58697c2004ef72b3cb52eb8cb53000ebdf86d
parentbe9e20b29ce0ed81091ab3589f4910232b457cec (diff)
Implemented structure of network
-rw-r--r--include/brain/bias_node.h10
-rw-r--r--include/brain/neural_link.h3
-rw-r--r--include/brain/neural_network.h4
-rw-r--r--include/brain/neural_node.h11
-rw-r--r--include/brain/neuron.h5
-rw-r--r--include/brain/sensor.h11
-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
-rwxr-xr-xwatch.sh4
13 files changed, 91 insertions, 13 deletions
diff --git a/include/brain/bias_node.h b/include/brain/bias_node.h
new file mode 100644
index 0000000..501a0a0
--- /dev/null
+++ b/include/brain/bias_node.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "brain/neural_node.h"
+
+class BiasNode: public NeuralNode
+{
+public:
+ BiasNode();
+ virtual double activation() const { return 1; }
+};
diff --git a/include/brain/neural_link.h b/include/brain/neural_link.h
index 447b26f..42ee2f9 100644
--- a/include/brain/neural_link.h
+++ b/include/brain/neural_link.h
@@ -7,7 +7,8 @@
class NeuralLink
{
public:
- double weightedActivation();
+ NeuralLink(double weight);
+ double weightedActivation() const;
private:
std::shared_ptr<NeuralNode> _input;
diff --git a/include/brain/neural_network.h b/include/brain/neural_network.h
index 37eb3a1..bb53079 100644
--- a/include/brain/neural_network.h
+++ b/include/brain/neural_network.h
@@ -15,8 +15,8 @@ public:
void setInput(int inputIndex, double activation);
int findMaxOutputIndex();
- int numberOfSensors() { return _sensors.size(); }
- int numberOfOutputs() { return _outputs.size(); }
+ int numberOfSensors() const { return _sensors.size(); }
+ int numberOfOutputs() const { return _outputs.size(); }
private:
std::vector<std::shared_ptr<NeuralNode>> _nodes;
diff --git a/include/brain/neural_node.h b/include/brain/neural_node.h
index abc27b8..3c2a6cb 100644
--- a/include/brain/neural_node.h
+++ b/include/brain/neural_node.h
@@ -3,5 +3,14 @@
class NeuralNode
{
public:
- virtual double activation() = 0;
+ NeuralNode(char type, int id);
+ virtual ~NeuralNode() {};
+
+ virtual double activation() const = 0;
+
+ char type() const { return _type; }
+ int id() const { return _id; }
+private:
+ char _type;
+ int _id;
};
diff --git a/include/brain/neuron.h b/include/brain/neuron.h
index 27d7202..1607cf0 100644
--- a/include/brain/neuron.h
+++ b/include/brain/neuron.h
@@ -9,8 +9,11 @@
class Neuron : public NeuralNode
{
public:
- virtual double activation() {}
+ Neuron(int id);
+ virtual ~Neuron() {}
+ virtual double activation() const;
private:
std::vector<std::shared_ptr<NeuralLink>> _inputLinks;
+ double sigmoid(double input) const;
};
diff --git a/include/brain/sensor.h b/include/brain/sensor.h
index 06b96d0..b33080b 100644
--- a/include/brain/sensor.h
+++ b/include/brain/sensor.h
@@ -4,10 +4,13 @@
class Sensor: public NeuralNode
{
-private:
- double _activation;
-
public:
+ Sensor(int id);
+ virtual ~Sensor() {}
+
void setActivation(double activation) { _activation = activation; }
- virtual double activation() { return _activation; }
+ virtual double activation() const { return _activation; }
+
+private:
+ double _activation;
};
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)
+{}
diff --git a/watch.sh b/watch.sh
index a22e34c..101bfa2 100755
--- a/watch.sh
+++ b/watch.sh
@@ -1,4 +1,4 @@
while true; do
- inotifywait -r -e modify,move ./
- ./test.sh
+ ./test.sh
+ inotifywait -r -e modify,move ./
done