/// <summary> /// Funkcja odpowiedzialna za proces nauki /// </summary> /// <param name="AIDecision">decyzja podjeta przez siec</param> /// <param name="opponentDecision">decyzja przeciwnika</param> public void updateWeights(Decision AIDecision, Decision opponentDecision) { Decision expectedDecision = opponentDecision.GetCounter(); //decyzja, ktora powinnismy podjac if (expectedDecision == AIDecision) return; //i tak sie wagi nie zmienia, wiec konczymy funkcje od razu double[] desiredOutput = expectedDecision.ToNeural(); double[] currentOutput = AIDecision.ToNeural(); for (int i = 0; i < outputs.Length; ++i) { double diff = (desiredOutput[i] - currentOutput[i]) * learningRate; //obliczamy poprawke for (int j = 0; j < inputs.Length; ++j) weights[i, j] += diff * inputs[j]; //wprowadzamy poprawke do wag sieci } if (minLearningRate < learningRate - learnigEnstinguishRate) learningRate -= learnigEnstinguishRate; }