#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, unsigned int numberOfSensors, unsigned int numberOfOutputs); NeuralNetwork(std::istream &&networkConfigFile, std::vector sensorInitialValues, unsigned int numberOfOutputs); void setInput(unsigned int inputIndex, double activation); unsigned int findMaxOutputIndex() const; unsigned int numberOfSensors() const { return _sensors.size(); } unsigned int numberOfOutputs() const { return _outputs.size(); } unsigned int numberOfNeurons() const { return _neurons.size(); } bool linkExists(std::string srcIdentifier, std::string destIdentifier, double weight) const; private: std::vector> _sensors; std::shared_ptr _biasNode; std::vector> _neurons; std::vector> _outputs; void parseFile(std::istream &&file); void addLink(std::shared_ptr source, std::shared_ptr destination, double weight); std::shared_ptr findOrAddSensor(unsigned int id); std::shared_ptr findOrAddNeuron(unsigned int id); };