diff options
Diffstat (limited to 'SingleMLP.cpp')
-rw-r--r-- | SingleMLP.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/SingleMLP.cpp b/SingleMLP.cpp new file mode 100644 index 0000000..8cc90c3 --- /dev/null +++ b/SingleMLP.cpp @@ -0,0 +1,64 @@ +#include "SingleMLP.hpp" + +SingleMLP::SingleMLP(unsigned inputCount, unsigned hiddenNodeCount, unsigned outputCount, NodeClass nodeClass, bool zeroed) +: m_hiddenLayer(inputCount, hiddenNodeCount, nodeClass, zeroed), + m_outputLayer(hiddenNodeCount, outputCount, nodeClass, zeroed) +{ + m_inputCount = inputCount; + m_hiddenNodeCount = hiddenNodeCount; + m_outputCount = outputCount; + m_nodeClass = nodeClass; +} + +void SingleMLP::setChromosome(const Chromosome &chromosome) +{ + if (chromosome.size() != getChromosomeSize()) + { + return; + } + + auto l1 = chromosome.begin() + m_hiddenLayer.getChromosomeSize(); + + Chromosome chr1(chromosome.begin(), l1); + Chromosome chr2(l1, chromosome.end()); + + m_hiddenLayer.setChromosome(chr1); + m_outputLayer.setChromosome(chr2); +} + +Chromosome SingleMLP::getChromosome() const +{ + Chromosome chromosome; + + Chromosome chr1 = m_hiddenLayer.getChromosome(); + Chromosome chr2 = m_outputLayer.getChromosome(); + + chromosome.insert(chromosome.end(), chr1.begin(), chr1.end()); + chromosome.insert(chromosome.end(), chr2.begin(), chr2.end()); + + return chromosome; +} + +unsigned SingleMLP::getChromosomeSize() const +{ + unsigned chrSize = 0; + chrSize += m_hiddenLayer.getChromosomeSize(); + chrSize += m_outputLayer.getChromosomeSize(); + + return chrSize; +} + +std::vector<float> SingleMLP::io(const std::vector<float> &inputs) +{ + std::vector<float> response; + + if (inputs.size() != m_inputCount) + { + return response; + } + + response = m_hiddenLayer.io(inputs); + response = m_outputLayer.io(response); + + return response; +} |