void Update()
    {
        Time.timeScale = TimeScale;
        TotalTime     += Time.deltaTime;
        if (TotalTime >= TimeLimit)
        {
            EvaluateFitness();    //Check fitness
            SelectAndCrossover(); //Select and crossover
            Mutate();             // Mutate population
            LogGenerationData();
            LogFittestData();
            DestroyPopulation();
            InstantiatePopulation();
            TotalTime = 0F;
            Generation++; //Increment Generation counter
        }
        else
        {
            if (FittestMonster != null)
            {
                FittestMonster.DeHighlight();
            }

            FittestMonster = GetFittestMonster();
            if (FittestMonster != null)
            {
                FittestMonster.Highlight();
            }
        }
    }
    /// <summary>
    /// Get the current fittest gene in the gene pool.
    /// </summary>
    /// <returns></returns>
    public BlockMonster GetFittestMonster()
    {
        var fitness  = 0F;
        var monsters = GetComponentsInChildren <BlockMonster>();

        foreach (var monster in monsters)
        {
            if (monster.GetFitness() > fitness)
            {
                fitness        = monster.GetFitness();
                FittestMonster = monster;
            }
        }
        return(FittestMonster);
    }