Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
            ;
        }
Пример #3
0
        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);
        }