19 #include <core/darwin.h> 20 #include <core/ann_dynamic.h> 28 template <
class TRAITS>
30 using Genotype =
typename TRAITS::Genotype;
31 using HiddenLayer =
typename TRAITS::HiddenLayer;
32 using OutputLayer =
typename TRAITS::OutputLayer;
35 explicit Brain(
const Genotype* genotype) : output_layer_(genotype->output_layer) {
37 inputs_.resize(g_inputs);
38 for (
const auto& layer : genotype->hidden_layers)
39 hidden_layers_.emplace_back(layer);
42 void setInput(
int index,
float value)
override { inputs_[index] = value; }
44 float output(
int index)
const override {
return output_layer_.values[index]; }
46 void think()
override {
47 if (g_config.normalize_input)
50 vector<float>* prev_layer = &inputs_;
52 for (
auto& layer : hidden_layers_) {
53 layer.evaluate(*prev_layer);
55 if (TRAITS::kNormalizeHiddenLayers)
58 prev_layer = &layer.values;
61 output_layer_.evaluate(*prev_layer);
63 if (g_config.normalize_output)
68 for (
float& output_value : output_layer_.values) {
69 if (isnan(output_value)) {
70 output_value = numeric_limits<float>::infinity();
75 void resetState()
override {
77 for (
auto& layer : hidden_layers_)
79 output_layer_.resetState();
83 vector<float> inputs_;
84 vector<HiddenLayer> hidden_layers_;
85 OutputLayer output_layer_;
The interface to the Phenotype
Definition: darwin.h:69
Conventional Neuroevolution (CNE) populations.
Definition: brain.h:26
void reset(std::vector< T > &v)
Reset the values in a vector to 0.
Definition: ann_dynamic.h:32
void activateLayer(vector< float > &out)
Apply the activation function over a set of values.
Definition: ann_dynamic.h:50