/// <inheritdoc/> public override sealed void Iteration() { var errorCalculation = new ErrorCalculation(); foreach (IMLDataPair pair in _training) { // calculate the error IMLData output = _network.Compute(pair.Input); for (int currentAdaline = 0; currentAdaline < output.Count; currentAdaline++) { double diff = pair.Ideal[currentAdaline] - output[currentAdaline]; // weights for (int i = 0; i <= _network.InputCount; i++) { double input; if (i == _network.InputCount) { input = 1.0d; } else { input = pair.Input[i]; } _network.AddWeight(0, i, currentAdaline, _learningRate * diff * input); } } errorCalculation.UpdateError(output.Data, pair.Ideal.Data, pair.Significance); } // set the global error Error = errorCalculation.Calculate(); }