diff options
Diffstat (limited to 'src/brain')
-rw-r--r-- | src/brain/bias_node.cpp | 6 | ||||
-rw-r--r-- | src/brain/neural_network.cpp | 31 | ||||
-rw-r--r-- | src/brain/neural_node.cpp | 6 | ||||
-rw-r--r-- | src/brain/neuron.cpp | 16 | ||||
-rw-r--r-- | src/brain/sensor.cpp | 5 |
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) -{} |