示例#1
0
    // 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();
            }
        }
    }
示例#2
0
    private void Start()
    {
        if (Instance == null)
        {
            Instance = this;
        }

        neuralNetworks = new List <NeuralNetwork>();
    }
示例#3
0
    // 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();
            }
        }
    }