private void runSingleLearningStep()
        {
            if (!valuesOK)
            {
                checkVariables();
            }

            if (valuesOK && !checkIfCurrentEpochIsCorrect())
            {
                if (currentIteration >= amountOfLearningPoints)
                {
                    currentIteration = 0;
                    currentIterationsInEpoch.Clear();
                    scatterSeriesAbove.Points.Clear();
                    scatterSeriesBelow.Points.Clear();

                    plotModel.InvalidatePlot(true);
                }

                SingleIteration iterationResult = new SingleIteration();
                iterationResult.inputs    = new int[3];
                iterationResult.inputs[0] = 1;
                iterationResult.inputs[1] = learningSet[currentIteration, 0];
                iterationResult.inputs[2] = learningSet[currentIteration, 1];

                iterationResult.weights    = new double[3];
                iterationResult.weights[0] = weights[0];
                iterationResult.weights[1] = weights[1];
                iterationResult.weights[2] = weights[2];

                setIterationsExpectedResult(ref iterationResult);

                for (int i = 0; i < 3; i++)
                {
                    iterationResult.sumResult += iterationResult.inputs[i] * iterationResult.weights[i];
                }

                iterationResult.sumResult = Math.Round(iterationResult.sumResult, 3);

                iterationResult.uniPolarResult = iterationResult.sumResult > 0 ? 1 : 0;
                iterationResult.isOK           = iterationResult.uniPolarResult == iterationResult.expectedResult;

                if (!iterationResult.isOK)
                {
                    updateWeights(iterationResult);
                }

                currentIterationsInEpoch.Add(iterationResult);
                iterationHistory.Add(iterationResult);

                currentIteration++;

                displayCurrentEpochCheckedPoints();
            }
        }
        private void updateWeights(SingleIteration iterationValues)
        {
            autoUpdate = true;

            IEnumerable <TextBox> weightsTextBoxes = weightsGrid.Children.OfType <TextBox>();

            for (int i = 0; i < 3; i++)
            {
                weights[i] = weights[i] + (learningCoefficient * (iterationValues.expectedResult - iterationValues.uniPolarResult) * iterationValues.inputs[i]);
                weightsTextBoxes.ElementAt(i).Text = weights[i].ToString();
            }

            autoUpdate = false;
        }
 private void setIterationsExpectedResult(ref SingleIteration singleIteration)
 {
     singleIteration.expectedResult = (singleIteration.inputs[2] > (separatingFunctionA * singleIteration.inputs[1] + separatingFunctionB)) ? 1 : 0;
 }