From 82a21657fb29ae8afba479fb821b47b5eeb608fb Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Sun, 16 Aug 2015 00:18:29 +0200 Subject: Made neural net recurrent --- src/brain/bias_node.cpp | 6 ------ src/brain/neural_network.cpp | 31 +++++++++++++++++++++++-------- src/brain/neural_node.cpp | 6 ------ src/brain/neuron.cpp | 16 +++++++--------- src/brain/sensor.cpp | 5 ----- 5 files changed, 30 insertions(+), 34 deletions(-) delete mode 100644 src/brain/bias_node.cpp delete mode 100644 src/brain/neural_node.cpp delete mode 100644 src/brain/sensor.cpp (limited to 'src') 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(i); + _sensors[i] = std::make_shared(); } for (int i=0; i(i); + auto output = std::make_shared(); _outputs.push_back(output); _neurons[i] = output; } @@ -26,13 +26,13 @@ NeuralNetwork::NeuralNetwork(std::istream &&networkConfigFile, std::vector for (unsigned int i=0; i(i); + auto sensor = std::make_shared(); sensor->setActivation(sensorInitialValues[i] ? 1 : 0); _sensors[i] = sensor; } for (int i=0; i(i); + auto output = std::make_shared(); _outputs.push_back(output); _neurons[i] = output; } @@ -86,7 +86,7 @@ std::shared_ptr NeuralNetwork::findOrAddSensor(int id) auto sensor = _sensors[id]; if (!sensor) { - sensor = std::make_shared(id); + sensor = std::make_shared(); _sensors[id] = sensor; } return sensor; @@ -97,7 +97,7 @@ std::shared_ptr NeuralNetwork::findOrAddNeuron(int id) auto neuron = _neurons[id]; if (!neuron) { - neuron = std::make_shared(id); + neuron = std::make_shared(); _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 -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&& 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) -{} -- cgit v1.2.3