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/neural_network.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'src/brain/neural_network.cpp') 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) -- cgit v1.2.3