summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Worthe <justin.worthe@gmail.com>2015-08-16 00:18:29 +0200
committerJustin Worthe <justin.worthe@gmail.com>2015-08-16 00:18:29 +0200
commit82a21657fb29ae8afba479fb821b47b5eeb608fb (patch)
tree5643cc274bd050b49ac94f83d347df0d7d2751d7 /src
parent43e9f647533d239d68d06fe96867c033dd7504c5 (diff)
Made neural net recurrent
Diffstat (limited to 'src')
-rw-r--r--src/brain/bias_node.cpp6
-rw-r--r--src/brain/neural_network.cpp31
-rw-r--r--src/brain/neural_node.cpp6
-rw-r--r--src/brain/neuron.cpp16
-rw-r--r--src/brain/sensor.cpp5
5 files changed, 30 insertions, 34 deletions
diff --git a/src/brain/bias_node.cpp b/src/brain/bias_node.cpp
deleted file mode 100644
index 99ae70d..0000000
--- a/src/brain/bias_node.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "brain/bias_node.h"
-
-BiasNode::BiasNode()
- :NeuralNode('b', 0)
-{
-}
diff --git a/src/brain/neural_network.cpp b/src/brain/neural_network.cpp
index 9061194..f3753f7 100644
--- a/src/brain/neural_network.cpp
+++ b/src/brain/neural_network.cpp
@@ -8,11 +8,11 @@ NeuralNetwork::NeuralNetwork(std::istream &&networkConfigFile, int numberOfSenso
for (int i=0; i<numberOfSensors; ++i)
{
- _sensors[i] = std::make_shared<Sensor>(i);
+ _sensors[i] = std::make_shared<Sensor>();
}
for (int i=0; i<numberOfOutputs; ++i)
{
- auto output = std::make_shared<Neuron>(i);
+ auto output = std::make_shared<Neuron>();
_outputs.push_back(output);
_neurons[i] = output;
}
@@ -26,13 +26,13 @@ NeuralNetwork::NeuralNetwork(std::istream &&networkConfigFile, std::vector<bool>
for (unsigned int i=0; i<sensorInitialValues.size(); ++i)
{
- auto sensor = std::make_shared<Sensor>(i);
+ auto sensor = std::make_shared<Sensor>();
sensor->setActivation(sensorInitialValues[i] ? 1 : 0);
_sensors[i] = sensor;
}
for (int i=0; i<numberOfOutputs; ++i)
{
- auto output = std::make_shared<Neuron>(i);
+ auto output = std::make_shared<Neuron>();
_outputs.push_back(output);
_neurons[i] = output;
}
@@ -86,7 +86,7 @@ std::shared_ptr<Sensor> NeuralNetwork::findOrAddSensor(int id)
auto sensor = _sensors[id];
if (!sensor)
{
- sensor = std::make_shared<Sensor>(id);
+ sensor = std::make_shared<Sensor>();
_sensors[id] = sensor;
}
return sensor;
@@ -97,7 +97,7 @@ std::shared_ptr<Neuron> NeuralNetwork::findOrAddNeuron(int id)
auto neuron = _neurons[id];
if (!neuron)
{
- neuron = std::make_shared<Neuron>(id);
+ neuron = std::make_shared<Neuron>();
_neurons[id] = neuron;
}
return neuron;
@@ -110,9 +110,24 @@ void NeuralNetwork::setInput(int inputIndex, double activation)
int NeuralNetwork::findMaxOutputIndex() const
{
- double currentMaxActivation = 0;
+ bool anyNodeChanged = true;
+ for (unsigned int iteration=0; anyNodeChanged && iteration<_neurons.size()*10; ++iteration)
+ {
+ anyNodeChanged = false;
+ for (auto const& neuron : _neurons)
+ {
+ neuron.second->calculateActivation();
+ if (neuron.second->activationChanged())
+ {
+ anyNodeChanged = true;
+ }
+ }
+ }
+
int currentMaxIndex = 0;
- for (unsigned int i=0; i<_outputs.size(); ++i)
+ double currentMaxActivation = _outputs[0]->activation();
+
+ for (unsigned int i=1; i<_outputs.size(); ++i)
{
double activation = _outputs[i]->activation();
if (activation >= currentMaxActivation)
diff --git a/src/brain/neural_node.cpp b/src/brain/neural_node.cpp
deleted file mode 100644
index 9bdd7c6..0000000
--- a/src/brain/neural_node.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#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
index 527e7da..f4fa12f 100644
--- a/src/brain/neuron.cpp
+++ b/src/brain/neuron.cpp
@@ -1,25 +1,23 @@
#include "brain/neuron.h"
#include <cmath>
-Neuron::Neuron(int id)
- :NeuralNode('n', id)
-{
-}
-
double Neuron::sigmoid(double input) const
{
double slope = 4.924273;
return (1/(1+(std::exp(-(slope*input)))));
}
-double Neuron::activation() const
+void Neuron::calculateActivation()
{
- double activationSum = 0;
+ double newActivation = 0;
for (auto const& link : _inputLinks)
{
- activationSum += link->weightedActivation();
+ newActivation += link->weightedActivation();
}
- return sigmoid(activationSum);
+ newActivation = sigmoid(newActivation);
+
+ _activationChanged = newActivation != _activation;
+ _activation = newActivation;
}
void Neuron::addInput(std::unique_ptr<NeuralLink>&& link)
diff --git a/src/brain/sensor.cpp b/src/brain/sensor.cpp
deleted file mode 100644
index 3069659..0000000
--- a/src/brain/sensor.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "brain/sensor.h"
-
-Sensor::Sensor(int id)
- :NeuralNode('s', id)
-{}