#pragma once #include #include #include #include #include #include "brain/neural_node.h" #include "brain/sensor.h" #include "brain/bias_node.h" #include "brain/neuron.h" class NeuralNetwork { public: NeuralNetwork(std::istream &&networkConfigFile, int numberOfSensors, int numberOfOutputs); NeuralNetwork(std::istream &&networkConfigFile, std::vector sensorInitialValues, int numberOfOutputs); void setInput(int inputIndex, double activation); int findMaxOutputIndex() const; int numberOfSensors() const { return _sensors.size(); } int numberOfOutputs() const { return _outputs.size(); } private: std::map> _sensors; std::shared_ptr _biasNode; std::map> _hiddenNodes; std::map> _outputs; void parseFile(std::istream &&file); void addLink(std::shared_ptr source, std::shared_ptr destination, double weight); std::shared_ptr findOrAddSensor(int id); std::shared_ptr findOrAddNeuron(int id); };