summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/brain/neural_link.h4
-rw-r--r--include/brain/neural_network.h14
-rw-r--r--include/brain/neural_node.h7
-rw-r--r--include/brain/neuron.h5
-rw-r--r--include/brain/sensor.h13
-rw-r--r--include/brain/sensor_neuron.h7
-rw-r--r--test/neural_network.cpp24
7 files changed, 61 insertions, 13 deletions
diff --git a/include/brain/neural_link.h b/include/brain/neural_link.h
index d89ac18..447b26f 100644
--- a/include/brain/neural_link.h
+++ b/include/brain/neural_link.h
@@ -2,12 +2,14 @@
#include <memory>
+#include "neural_node.h"
+
class NeuralLink
{
public:
double weightedActivation();
private:
- std::shared_ptr<Neuron> _input;
+ std::shared_ptr<NeuralNode> _input;
double _weight;
};
diff --git a/include/brain/neural_network.h b/include/brain/neural_network.h
index d62112c..99e5f60 100644
--- a/include/brain/neural_network.h
+++ b/include/brain/neural_network.h
@@ -4,17 +4,23 @@
#include <istream>
#include <vector>
+#include "brain/neural_node.h"
+#include "brain/sensor.h"
+
class NeuralNetwork
{
public:
NeuralNetwork(std::istream &&networkConfigFile, int numberOfSensors, int numberOfOutputs);
void setInput(int inputIndex, double activation);
- int findOutputIndex();
+ int findMaxOutputIndex();
+
+ int numberOfSensors();
+ int numberOfOutputs();
private:
- std::vector<std::shared_ptr<Neuron>> _neurons;
- std::vector<std::shared_ptr<SensorNeuron>> _sensors;
- std::vector<std::shared_ptr<Neuron>> _outputs;
+ std::vector<std::shared_ptr<NeuralNode>> _nodes;
+ std::vector<std::shared_ptr<Sensor>> _sensors;
+ std::vector<std::shared_ptr<NeuralNode>> _outputs;
};
diff --git a/include/brain/neural_node.h b/include/brain/neural_node.h
new file mode 100644
index 0000000..abc27b8
--- /dev/null
+++ b/include/brain/neural_node.h
@@ -0,0 +1,7 @@
+#pragma once
+
+class NeuralNode
+{
+public:
+ virtual double activation() = 0;
+};
diff --git a/include/brain/neuron.h b/include/brain/neuron.h
index dd658cd..1878752 100644
--- a/include/brain/neuron.h
+++ b/include/brain/neuron.h
@@ -3,7 +3,10 @@
#include <memory>
#include <vector>
-class Neuron
+#include "neural_node.h"
+#include "neural_link.h"
+
+class Neuron : public NeuralNode
{
public:
virtual double activation();
diff --git a/include/brain/sensor.h b/include/brain/sensor.h
new file mode 100644
index 0000000..cdee218
--- /dev/null
+++ b/include/brain/sensor.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "brain/neural_node.h"
+
+class Sensor: public NeuralNode
+{
+private:
+ double _activation;
+
+public:
+ void setActivation(double activation);
+ virtual double activation();
+};
diff --git a/include/brain/sensor_neuron.h b/include/brain/sensor_neuron.h
deleted file mode 100644
index fb3d4df..0000000
--- a/include/brain/sensor_neuron.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-class SensorNeuron: public Neuron
-{
-public:
- setActivation(double activation);
-};
diff --git a/test/neural_network.cpp b/test/neural_network.cpp
new file mode 100644
index 0000000..ba0df4d
--- /dev/null
+++ b/test/neural_network.cpp
@@ -0,0 +1,24 @@
+#include "catch.hpp"
+#include <sstream>
+
+#include "brain/neural_network.h"
+
+SCENARIO("network is read from istream")
+{
+ GIVEN("an empty config file")
+ {
+ std::stringstream file;
+ file << "" << std::endl;
+
+ WHEN ("the network is initialized")
+ {
+ NeuralNetwork network(std::move(file), 1, 2);
+
+ THEN("the specified number of inputs and outputs are created")
+ {
+ REQUIRE(network.numberOfSensors() == 1);
+ REQUIRE(network.numberOfOutputs() == 2);
+ }
+ }
+ }
+}