Exemplo n.º 1
0
        public double[] FeedForward(double[] input)
        {
            if (input.Length != NumberOfInputNodes)
            {
                throw new InvalidOperationException($"Number of inputs expected to be {NumberOfInputNodes} but was {input.Length}");
            }

            var startNodes = nodes.Where(n => n.Layer == firstLayer).ToArray();

            // Bias Node is always 1
            NumberOfBiasNodes.Times(i => startNodes[i].OutputValue = 1);
            NumberOfInputNodes.Times(i => startNodes[i + NumberOfBiasNodes].OutputValue = input[i]);

            EngageNodes();
            var outputs = GetOutputs().ToArray();

            ResetNodes();

            return(outputs);
        }
Exemplo n.º 2
0
        public Genome(int numberOfInputNodes, int numberOfOutputNodes, InnovationHistory innovationHistory, bool isBaby = false)
        {
            NumberOfBiasNodes      = 1;
            NumberOfInputNodes     = numberOfInputNodes;
            NumberOfOutputNodes    = numberOfOutputNodes;
            this.innovationHistory = innovationHistory;

            Guard.GreaterThanZero(() => numberOfInputNodes);
            Guard.GreaterThanZero(() => numberOfOutputNodes);

            Layers = 2;

            if (isBaby)
            {
                return;
            }

            NumberOfBiasNodes.Times(_ => AddNode(firstLayer));
            numberOfInputNodes.Times(_ => AddNode(firstLayer));
            numberOfOutputNodes.Times(_ => AddNode(firstLayer + 1));
        }