private void OnTriggerEnter(Collider collider) { if (collider.GetComponent <QLearning>()) { auto = collider.GetComponent <QLearning>(); auto.snelheid = 0; auto.gebotst = true; auto.Reset(); } if (collider.GetComponent <AutoScript1>()) { auto1 = collider.GetComponent <AutoScript1>(); auto1.moveSpeed = 0; auto1.gebotst = true; } }
private void OnTriggerEnter(Collider collider) { if (collider.GetComponent <QLearning>()) { auto = collider.GetComponent <QLearning>(); auto.aantalRonden += 1; if (auto.aantalRonden > qTable.ronden) { qTable.ronden = auto.aantalRonden; qTable.voegToePublic(); if (auto.aantalRonden == 10) { qTable.Reset(); } } } if (collider.GetComponent <AutoScript1>()) { auto1 = collider.GetComponent <AutoScript1>(); auto1.aantalRonden += 1; if (auto1.aantalRonden > NeuralNetwork.ronden) { print(NeuralNetwork.frame + ", " + auto1.aantalRonden); NeuralNetwork.ronden = auto1.aantalRonden; NeuralNetwork.voegToePublic(); if (auto1.aantalRonden == 10) { NeuralNetwork.Resette(); } } //if (auto.aantalRonden == 10) //{ // NeuralNetwork.Reset(); //} } }
void Update() { framecount += 1; // Iteratie door de lijst met auto's for (int i = 0; i < autos.Count; i++) { // Aantal auto's dat is gebotst if (autos[i].gebotst == true) { botsCount += 1; } // Afstand die de auto heeft afgelegd //if (framecount >= 2000) //{ // teVer = true; //} } // Resetmethode van de auto's if (botsCount == NeuralNetwork.aantalAutos)// || teVer == true) { // Winnaar wordt bijgehouden winnaar = autos[NeuralNetwork.winnaar]; // Er wordt geïteerd door de lijst for (int i = 0; i < autos.Count; i++) { // Auto's worden toegevoegd aan nieuweRonde als ze bij de top 20% zitten. if (autos[i].distanceTraveled >= NeuralNetwork.grens) { nieuweRonde.Add(autos[i]); } } for (int i = 0; i < autos.Count; i++) { parentOne = Random.Range(0, nieuweRonde.Count); parentTwo = Random.Range(0, nieuweRonde.Count); //print(nieuweRonde.Count + " " + willekeurig); // Auto's krijgen een ander neuraal netwerk als ze niet bij de beste 20% horen of niet voldoende afstand hebben afgelegd. if (autos[i].distanceTraveled < NeuralNetwork.grens) { NeuralNetwork.CrossOverWeights(nieuweRonde[parentOne].weightsInput, nieuweRonde[parentTwo].weightsInput, autos[i].weightsInput); NeuralNetwork.CrossOverWeights(nieuweRonde[parentOne].weightsHidden, nieuweRonde[parentTwo].weightsHidden, autos[i].weightsHidden); NeuralNetwork.CrossOverWeights(nieuweRonde[parentOne].weightsSecondHidden, nieuweRonde[parentTwo].weightsSecondHidden, autos[i].weightsSecondHidden); NeuralNetwork.CrossOverBias(nieuweRonde[parentOne].biasInput, nieuweRonde[parentTwo].biasInput, autos[i].biasInput); NeuralNetwork.CrossOverBias(nieuweRonde[parentOne].biasHidden, nieuweRonde[parentTwo].biasHidden, autos[i].biasHidden); NeuralNetwork.CrossOverBias(nieuweRonde[parentOne].biasSecondHidden, nieuweRonde[parentTwo].biasSecondHidden, autos[i].biasSecondHidden); } // Zet de auto terug op zijn oorspronkelijke plek autos[i].Reset(); } //print("Max: " + NeuralNetwork.rewardListCopy[0] + ", Min: " + NeuralNetwork.rewardListCopy[autos.Count - 1] + ", Mean: " + NeuralNetwork.rewardListCopy.Average() + ", Frame: " + framecount); //NeuralNetwork.voegToe("Gen: " + NeuralNetwork.gen + ", Gemiddelde reward: " + NeuralNetwork.rewardListCopy.Average().ToString()); NeuralNetwork.gen += 1; float rewardMean = NeuralNetwork.rewardListCopy.Average(); teVer = false; nieuweRonde.Clear(); framecount = 0; } // botsCount wordt na elke update weer op 0 gezet. botsCount = 0; }