private WinningNeuronModel winningNeuron(Position iteration, int counter, bool isDisabler, int IterationDisable, int CycleQty) { WinningNeuronModel winningNeuron = new WinningNeuronModel() { Value = null, Id = 0 }; neurons.ForEach(n => { if (isDisabler && (CycleQty == 0 || counter < CycleQty) && n.StopCount <= IterationDisable && n.StopCount > 0) { n.StopCount++; } else { n.StopCount = 0; var d = SimiliarityCalc(n.Position, iteration) + n.Balance; if (winningNeuron.Value == null || d < winningNeuron.Value) { winningNeuron.Value = d; winningNeuron.Id = n.Id; } } }); return(winningNeuron); }
public void Calc(double LearnRation, int balance = 0, bool isDisabler = false, int IterationDisable = 0, int CycleQty = 0) { int counter = 0; dataList.ForEach(it => { WinningNeuronModel winningNeuron = this.winningNeuron(it, counter, isDisabler, IterationDisable, CycleQty); GetNewWeight(winningNeuron, it, LearnRation, balance); counter++; }); }
private void GetNewWeight(WinningNeuronModel winningNeuron, Position iteration, double LearnRation, int balance) { var position = neurons.Find(p => p.Id == winningNeuron.Id).Position; position.X = (int)Math.Round(position.X + (LearnRation * (iteration.X - position.X)), 3); position.Y = (int)Math.Round(position.Y + (LearnRation * (iteration.Y - position.Y)), 3); neurons.Find(p => p.Id == winningNeuron.Id).Position = new Position() { X = position.X, Y = position.Y }; neurons.Find(p => p.Id == winningNeuron.Id).Balance += balance; neurons.Find(p => p.Id == winningNeuron.Id).StopCount = 1; }