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); }