private void updateNodeWeights(SLPNode outputNode, bool[] input, double nodeError)
        {
            double LEARNING_RATE = 0.1;

            for (int i = 0; i < input.Length - 1; i++)
            {
                if (input[i])
                {
                    outputNode.weights[inputNodes[i]] += LEARNING_RATE * nodeError;
                }
            }
        }
        internal double calcNodeOutput(SLPNode node, bool[] input)
        {
            double result = 0;

            for (int i = 0; i < input.Length - 1; i++)
            {
                if (input[i])
                {
                    result += 1 * node.weights[inputNodes[i]];
                }
            }

            return(result /= 16 * 16);
        }
        public SingleLayerPerceptron(int inputs, int outputs)
        {
            for (int i = 0; i < inputs; i++)
            {
                inputNodes.Add(new SLPNode());
            }

            for (int i = 0; i < outputs; i++)
            {
                SLPNode outputNode = new SLPNode();
                Random  random     = new Random();

                foreach (SLPNode inputNode in inputNodes)
                {
                    outputNode.weights.Add(inputNode, random.Next(-1000, 1000) * 0.001);
                }
                outputNodes.Add(outputNode);
            }
        }