Kaspersky Neuromorphic Platform  1.0.0
API Reference
Loading...
Searching...
No Matches
population.h
Go to the documentation of this file.
1
22#pragma once
23
24#include <knp/core/core.h>
26#include <knp/core/uid.h>
28
29#include <functional>
30#include <utility>
31#include <vector>
32
36namespace knp::core
37{
38
44template <typename NeuronType>
45class Population final
46{
47public:
51 using PopulationNeuronType = NeuronType;
59 using NeuronParameters = neuron_traits::neuron_parameters<NeuronType>;
60
65 using NeuronGenerator = std::function<std::optional<NeuronParameters>(size_t index)>;
66
67public: // NOLINT
73 Population(NeuronGenerator generator, size_t neurons_count);
74
81 Population(const knp::core::UID &uid, NeuronGenerator generator, size_t neurons_count);
82
83public: // NOLINT
88 [[nodiscard]] const UID &get_uid() const { return base_.uid_; }
89
95 [[nodiscard]] auto &get_tags() { return base_.tags_; }
96
102 [[nodiscard]] const auto &get_tags() const { return base_.tags_; }
103
104public: // NOLINT
109 [[nodiscard]] const std::vector<NeuronParameters> &get_neurons_parameters() const { return neurons_; }
110
116 [[nodiscard]] const NeuronParameters &get_neuron_parameters(size_t index) const { return neurons_[index]; }
117
124 void set_neuron_parameters(size_t index, NeuronParameters &&parameters) { neurons_[index] = std::move(parameters); }
125
132 void set_neurons_parameters(size_t index, const NeuronParameters &parameters) { neurons_[index] = parameters; }
133
134public: // NOLINT
140 [[nodiscard]] TagMap &get_neuron_tags(size_t index)
141 {
142 return base_.tags_.template get_tag<std::vector<TagMap>>("neuron_tags")[index];
143 }
144
145public: // NOLINT
151 void add_neurons(NeuronGenerator generator, size_t count)
152 {
153 neurons_.reserve(count);
154 for (size_t i = 0; i < count; ++i)
155 {
156 auto neuron = generator(i);
157 if (neuron.has_value())
158 {
159#if defined(_MSC_VER)
160 neurons_.emplace_back(std::move(neuron.value()));
161#else
162 neurons_.template emplace_back(std::move(neuron.value()));
163#endif
164 }
165 }
166 }
167
172 void remove_neurons(const std::vector<size_t> &neuron_indexes)
173 {
174 size_t index_shift = 0;
175 for (const auto &index : neuron_indexes)
176 {
177 remove_neuron(index - index_shift++);
178 }
179 }
180
185 void remove_neuron(const size_t &neuron_index)
186 {
187 auto iter = neurons_.begin();
188 std::advance(iter, neuron_index);
189 neurons_.erase(iter);
190 }
191
192public: // NOLINT
199 const auto &operator[](size_t index) const { return get_neuron_parameters(index); }
205 auto &operator[](size_t index) { return neurons_[index]; }
206
211 auto begin() const { return neurons_.cbegin(); }
216 auto begin() { return neurons_.begin(); }
221 auto end() const { return neurons_.cend(); }
226 auto end() { return neurons_.end(); }
227
228public: // NOLINT
233 [[nodiscard]] size_t size() const { return neurons_.size(); }
234
235private:
236 BaseData base_;
237 std::vector<NeuronParameters> neurons_;
238};
239
240
248using AllPopulations = boost::mp11::mp_transform<knp::core::Population, knp::neuron_traits::AllNeurons>;
249
259using AllPopulationsVariant = boost::mp11::mp_rename<AllPopulations, std::variant>;
260
261} // namespace knp::core
The Population class is a container of neurons of the same model.
Definition population.h:46
const NeuronParameters & get_neuron_parameters(size_t index) const
Get parameters of the specific neuron in the population.
Definition population.h:116
TagMap & get_neuron_tags(size_t index)
Get tags used by neuron with the specified index.
Definition population.h:140
neuron_traits::neuron_parameters< NeuronType > NeuronParameters
Neuron parameters and their values for the specified neuron type.
Definition population.h:59
auto end() const
Get an iterator pointing to the last element of the population.
Definition population.h:221
void set_neuron_parameters(size_t index, NeuronParameters &&parameters)
Set parameters for the specific neuron in the population.
Definition population.h:124
void remove_neurons(const std::vector< size_t > &neuron_indexes)
Remove neurons with given indexes from the population.
Definition population.h:172
void add_neurons(NeuronGenerator generator, size_t count)
Add neurons to the population.
Definition population.h:151
auto & operator[](size_t index)
Get parameter values of a neuron with the given index.
Definition population.h:205
auto begin() const
Get an iterator pointing to the first element of the population.
Definition population.h:211
const auto & operator[](size_t index) const
Get parameter values of a neuron with the given index.
Definition population.h:199
void set_neurons_parameters(size_t index, const NeuronParameters &parameters)
Set parameters for the specific neuron in the population.
Definition population.h:132
auto end()
Get an iterator pointing to the last element of the population.
Definition population.h:226
auto begin()
Get an iterator pointing to the first element of the population.
Definition population.h:216
const auto & get_tags() const
Get tags used by the population.
Definition population.h:102
Population< NeuronType > PopulationType
Population of neurons with the specified neuron type.
Definition population.h:55
const UID & get_uid() const
Get population UID.
Definition population.h:88
auto & get_tags()
Get tags used by the population.
Definition population.h:95
size_t size() const
Count number of neurons in the population.
Definition population.h:233
Population(const knp::core::UID &uid, NeuronGenerator generator, size_t neurons_count)
Construct a population by running a neuron generator.
Population(NeuronGenerator generator, size_t neurons_count)
Construct a population by running a neuron generator.
std::function< std::optional< NeuronParameters >(size_t index)> NeuronGenerator
Type of the neuron generator.
Definition population.h:65
void remove_neuron(const size_t &neuron_index)
Remove a specific neuron from the population.
Definition population.h:185
const std::vector< NeuronParameters > & get_neurons_parameters() const
Get parameters of all neurons in the population.
Definition population.h:109
NeuronType PopulationNeuronType
Type of the population neurons.
Definition population.h:51
Class definition for core library basic entities.
Core library namespace.
Definition backend.h:50
boost::mp11::mp_rename< AllPopulations, std::variant > AllPopulationsVariant
Population variant that contains any population type specified in AllPopulations.
Definition population.h:259
boost::mp11::mp_transform< knp::core::Population, knp::neuron_traits::AllNeurons > AllPopulations
List of population types based on neuron types specified in knp::neuron_traits::AllNeurons.
Definition population.h:248
List of all neuron type traits.
Synaptic impact message class.
UID class and routines.