summaryrefslogtreecommitdiff
path: root/src/brain/neural_network.cpp
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/brain/neural_network.cpp
parent43e9f647533d239d68d06fe96867c033dd7504c5 (diff)
Made neural net recurrent
Diffstat (limited to 'src/brain/neural_network.cpp')
-rw-r--r--src/brain/neural_network.cpp31
1 files changed, 23 insertions, 8 deletions
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)