diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 21:28:44 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 21:28:44 +0200 |
commit | dc01a3e25e6c4ef056467e36f876ebd68f3ade22 (patch) | |
tree | 2147462c4cbe9a7b0de59d13bb20c842e33f75a3 /2015-spacebot/src/brain/neuron.cpp | |
parent | be89211af895548425be999f660a1195efe9fc8a (diff) | |
parent | 8eebf1079fbed2848ee47cf990f5def5926a0c1f (diff) |
Merge branch 'spacebot-main'
Diffstat (limited to '2015-spacebot/src/brain/neuron.cpp')
-rw-r--r-- | 2015-spacebot/src/brain/neuron.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/2015-spacebot/src/brain/neuron.cpp b/2015-spacebot/src/brain/neuron.cpp new file mode 100644 index 0000000..c7dba2c --- /dev/null +++ b/2015-spacebot/src/brain/neuron.cpp @@ -0,0 +1,40 @@ +#include "brain/neuron.h" +#include <cmath> + +double Neuron::sigmoid(double input) const +{ + const double slope = 4.924273; + return (1/(1+(std::exp(-(slope*input))))); +} + +bool Neuron::calculateActivation() +{ + double newActivation = 0; + for (auto const& link : _inputLinks) + { + newActivation += link.weightedActivation(); + } + newActivation = sigmoid(newActivation); + + const double errorMargin = 0.000001; + bool activationChanged = std::abs(newActivation - _activation) > errorMargin; + _activation = newActivation; + return activationChanged; +} + +void Neuron::addInput(NeuralLink&& link) +{ + _inputLinks.push_back(std::move(link)); +} + +bool Neuron::hasInputWithWeight(std::string srcIdentifier, double weight) const +{ + for (auto const& link : _inputLinks) + { + if (link.inputIdentifier() == srcIdentifier && link.weight() == weight) + { + return true; + } + } + return false; +} |