/// <summary> /// If using NEAT, this function simply sets the AgentBrain genome variable as the brain. Otherwise, the genome is actually used as a genome and is decoded into the appropriate brain structure. /// </summary> private void createBrains() { if (Genome != null) { if (NeatBrain) { Brain = Genome; } else if (Homogeneous) { ANN = SubstrateDescription.generateHomogeneousGenome(Genome, NormalizeANNWeights, this.AdaptableANN, this.ModulatoryANN, EvolveSubstrate); Brains = new List<INetwork>(); for (int i = 0; i < NumRobots; i++) { INetwork b = ANN.Decode(null); Brains.Add(b); } } else { if (MultipleBrains) { List<NeatGenome> genes = SubstrateDescription.generateGenomeStackSituationalPolicy(Genome, Convert.ToUInt32(NumRobots), NormalizeANNWeights, AdaptableANN, ModulatoryANN, 2, out ZCoordinates); for (int j = 0; j < genes.Count; j++) MultiBrains.Add(genes[j].Decode(null)); Brain = MultiBrains[0]; } else if (Hive) { ANN = SubstrateDescription.generateHiveBrainGenomeStack(Genome, Convert.ToUInt32(NumRobots), NormalizeANNWeights, AdaptableANN, ModulatoryANN, out ZCoordinates, EvolveSubstrate, UseCTRNNs); Brain = UseCTRNNs ? ANN.DecodeToCTRNN() : ANN.Decode(null); } else { ANN = SubstrateDescription.generateMultiGenomeStack(Genome, Convert.ToUInt32(NumRobots), NormalizeANNWeights, AdaptableANN, ModulatoryANN, out ZCoordinates, EvolveSubstrate); Brain = ANN.Decode(null); } } } }