/// <summary>
        ///     Logs the static maze genomes on which all initialization evaluations will be conducted.
        /// </summary>
        /// <param name="initializationMazeGenomes">The initialization maze genomes to log.</param>
        /// <param name="mazeGenomeDataLogger">The maze data logger.</param>
        public void LogStartingMazeGenomes(List <MazeGenome> initializationMazeGenomes, IDataLogger mazeGenomeDataLogger)
        {
            // Open the logger
            mazeGenomeDataLogger?.Open();

            // Write the header
            mazeGenomeDataLogger?.LogHeader(new List <LoggableElement>
            {
                new LoggableElement(PopulationFieldElements.Generation, null),
                new LoggableElement(PopulationFieldElements.GenomeId, null),
                new LoggableElement(PopulationFieldElements.SpecieId, null)
            });

            // Write the genome XML for all initialization genomes
            foreach (MazeGenome mazeGenome in initializationMazeGenomes)
            {
                // Write the genome XML
                mazeGenomeDataLogger?.LogRow(new List <LoggableElement>
                {
                    new LoggableElement(PopulationFieldElements.Generation, mazeGenome.BirthGeneration),
                    new LoggableElement(PopulationFieldElements.GenomeId, mazeGenome.Id),
                    new LoggableElement(PopulationFieldElements.SpecieId, mazeGenome.SpecieIdx)
                });
            }
        }