Ejemplo n.º 1
0
        /// <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);
                        }
                    }
            }
        }