private WTAMLModel GetNewWeight(WTAMLModel data, WinningNeuronModel winningNeuron, List <double> iteration) { var weight = data.Neurons.Find(p => p.Id == winningNeuron.Id).InputsWeight.ToList(); for (int i = 0; i < weight.Count(); i++) { weight[i] = Math.Round(weight[i] + (0.5 * (iteration[i] - weight[i])), 3); } data.Neurons.Find(p => p.Id == winningNeuron.Id).InputsWeight = weight; return(data); }
public void Calc(WTAMLModel data) { _outputService.InitInformation(data.Neurons); for (var it = 0; it < data.Iterations.Count; it++) { var iteration = data.Iterations[it]; _outputService.WriteIterationData(iteration, it + 1); WinningNeuronModel winningNeuron = this.winningNeuron(data.Neurons, iteration); _outputService.WriteWinningNeuron(winningNeuron.Id + 1); data = GetNewWeight(data, winningNeuron, iteration); _outputService.WriteNeuronState(data.Neurons); } ; }
private WinningNeuronModel winningNeuron(List <WTANeuronModel> neurons, List <double> iteration) { WinningNeuronModel winningNeuron = new WinningNeuronModel() { Value = null, Id = 0 }; neurons.ForEach(n => { var d = SimiliarityCalc(n, iteration); _outputService.SimilarityLog(n.Id + 1, d); if (winningNeuron.Value == null || d < winningNeuron.Value) { winningNeuron.Value = d; winningNeuron.Id = n.Id; } }); return(winningNeuron); }