/// <summary>
        /// Führt die Evolution durch
        /// </summary>
        private void Evolve()
        {
            Timeout.Stop();
            OnRuntimeChanged(100);
            Debug.WriteLine("Evolving ...");
            Generator<Proband> evolutionGenerator = new Generator<Proband>();

            // Evolution durchführen
            IList<Proband> probanden = new List<Proband>(Probanden);
            Maze4 maze = Maze;
            int generation = CurrentGeneration++;
            int index = 0;
            GenerationReport<Proband> report = evolutionGenerator.EvolveGeneration(GenerationSize, probanden, code => new Proband(maze, generation, Interlocked.Increment(ref index), code));
            LastReport = report;
            Probanden = report.NewGeneration.ToList();

            // Feddsch.
            IsRunning = false;

            // Erfolg vermelden
            EventHandler<GenerationReportEventArgs<Proband>> func = RunCompleted;
            if (func == null) return;
            func(this, new GenerationReportEventArgs<Proband>(report));

            // AutoEvolve verwenden
            if (AutoEvolveMode)
            {
                if (CurrentGeneration % 3 == 0) RegenerateMaze();
                PerformRun(true);
            }
        }