// Update is called once per frame void Update() { if (isTraining == false) { //Fresh start if (generationNumber == 0 && neuralNetworks == null) { InitEntityNeuralNetworks(); } //Continue else if (!loadFromFile) { averageFitness = CalculateAverageFitness(); bestFitness = CalculateBestFitness(); bestFitnessNr.text = bestFitness.ToString(); avgFitnessNr.text = averageFitness.ToString(); neuralNetworks.Sort(); for (int i = 0; i < populationSize / 2; i++) { neuralNetworks[i] = new NeuralNetwork(neuralNetworks[i + (populationSize / 2)]); neuralNetworks[i].Mutate(); neuralNetworks[i + (populationSize / 2)] = new NeuralNetwork(neuralNetworks[i + (populationSize / 2)]); } for (int i = 0; i < populationSize; i++) { neuralNetworks[i].SetFitness(0f); } } loadFromFile = false; DrawNeuralNetwork.NeuralNetworkDrawing(neuralNetworks[populationSize / 2]); generationNumber++; generationNr.text = generationNumber.ToString(); isTraining = true; CreateEntities(); timer = 0.0f; } else { timer += Time.deltaTime; int entityCount = entities.Count; for (int i = 0; i < entities.Count; i++) { if (entities[i] == null) { entityCount--; } } if (entityCount == 0 || timer >= maxTime) { Timer(); } } }
// Update is called once per frame void Update() { if (isTraining == false) { //Fresh start if (generationNumber == 0 && neuralNetworks == null) { Debug.Log("Fresh start"); InitEntityNeuralNetworks(); } else if (generationNumber == 0) { Debug.Log("Start from neuralnetworks"); } //Continue else { averageFitness = CalculateAverageFitness(); bestFitness = CalculateBestFitness(); bestFitnessNr.text = bestFitness.ToString(); avgFitnessNr.text = averageFitness.ToString(); neuralNetworks.Sort(); for (int i = 0; i < populationSize / 2; i++) { neuralNetworks[i] = new NeuralNetwork(neuralNetworks[i + (populationSize / 2)]); neuralNetworks[i].Mutate(); neuralNetworks[i + (populationSize / 2)] = new NeuralNetwork(neuralNetworks[i + (populationSize / 2)]); } for (int i = 0; i < populationSize; i++) { neuralNetworks[i].SetFitness(0f); } } DrawNeuralNetwork.NeuralNetworkDrawing(neuralNetworks[0]); generationNumber++; generationNr.text = generationNumber.ToString(); isTraining = true; wispSpawnPosition.position = GridManager.Instance.GetRandomNode().vPosition + Vector3.up * 3; WispTargetPosition.position = GridManager.Instance.GetRandomNode().vPosition + Vector3.up * 3; CreateEntities(); timer = 0.0f; } else { timer += Time.deltaTime; int entityCount = entities.Count; for (int i = 0; i < entities.Count; i++) { if (entities[i] == null) { entityCount--; } } if (entityCount == 0 || timer >= maxTime) { Timer(); } } }