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; }