public override void Train(int NumberOfIteration)
        {
            Random       Randomizer = new Random();
            ListShuffler Shuffler   = new ListShuffler();

            Shuffler.Shuffle(Points, Randomizer);
            double CurrentError = 0;

            foreach (Point TargetPoint in Points)
            {
                this.SetTargetPoints(TargetPoint);

                LambdaParameter = MaxRange * Math.Pow(MinRange / MaxRange, NumberOfIteration / (double)EpochsCount);
                Winner          = this.SeekForWinner();
                NeuronsToChange = this.GetNeuronsToChange();

                this.SetNeuronPotential(NumberOfIteration);

                CurrentError += Winner.CalculateDistanceFrom(TargetPoint);

                this.UpdateWeights(NumberOfIteration, TargetPoint);
            }
            foreach (Neuron Neuron in Neurons)
            {
                Neuron.UpdatePositions(Neuron.GetWeight(0), Neuron.GetWeight(1));
            }
            Errors.Add(new Point(NumberOfIteration, CurrentError / Points.Count()));
        }
        private List <Neuron> GetNeuronsToChange()
        {
            List <Neuron> NeuronsToUpdate = new List <Neuron>();

            foreach (Neuron Neuron in Neurons)
            {
                Point NeuronAsPoint = Neuron.GetAsPoint();
                if (Winner.CalculateDistanceFrom(NeuronAsPoint) < LambdaParameter)
                {
                    NeuronsToUpdate.Add(Neuron);
                }
            }
            NeuronsToUpdate.Add(Winner);
            return(NeuronsToUpdate);
        }