Exemplo n.º 1
0
        protected void StartFromScratch()
        {
            // Add basic genome input and output into alive genomes;
            Genometype.NodeGenes[] nodes = new Genometype.NodeGenes[] {
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 0),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 1),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 2),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 3),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 4),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 5),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 6),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Input, _IOIndex: 7),
                new Genometype.NodeGenes(Genometype.NodeGenes.Types.Output, _IOIndex: 0),
            };

            Genometype genome = new Genometype(nodes);

            GenomeMutationController mutationController = new GenomeMutationController(genome);

            mutationController.MutateByAddingConnection();
            m_aliveGenomes.AddRange(mutationController.mutations);

            for (int i = 0; i < m_aliveGenomes.Count; i++)
            {
                m_weightOptimizers.Add(new WeightOptimize(this, genomeBirdCount, genomeBirdSurviveCount));
                m_weightOptimizers[i].InsertGenome(m_aliveGenomes[i]);
            }
        }
        public bool FindAliveData(out Genometype genome)
        {
            for (int i = 0; i < m_instances.Length; i++)
            {
                if (m_instances[i].gameObject.activeSelf)
                {
                    genome = m_instances[i].GenomeData;
                    return(true);
                }
            }

            genome = new Genometype(null, null);
            return(false);
        }
        private Genometype TweakWeightInGenome(Genometype genome, bool fullyRandom = false)
        {
            Genometype newGenome = genome.Clone();

            for (int i = 0; i < newGenome.connectionGenes.Length; i++)
            {
                if (fullyRandom)
                {
                    newGenome.connectionGenes[i].weight = Random.Range(-10f, 10f);
                }
                else
                {
                    newGenome.connectionGenes[i].weight += Random.Range(-1f, 1f);
                }
            }

            // Debug.Log(newGenome);

            return(newGenome);
        }
        public void FindBestData()
        {
            Genometype bestData  = m_inputs[0].GenomeData;
            float      bestScore = m_gameController.CalculateGenomeCharacterPoints(m_inputs[0]);

            for (int i = 1; i < instanceCount; i++)
            {
                float score = m_gameController.CalculateGenomeCharacterPoints(m_inputs[i]);

                if (score < bestScore)
                {
                    bestData  = m_inputs[i].GenomeData;
                    bestScore = score;
                }

                GameObject.Destroy(m_inputs[i].gameObject);
            }
            GameObject.Destroy(m_inputs[0].gameObject);

            m_currentGenome = bestData;
        }
        public bool CharacterReachEnd(CharacterController character)
        {
            if (finished)
            {
                return(false);
            }

            GenomeControlInput input = character.GetComponent <GenomeControlInput>();

            bool matched = false;

            for (int i = 0; i < instanceCount; i++)
            {
                if (input == m_inputs[i])
                {
                    matched = true;
                    break;
                }
            }

            if (!matched)
            {
                return(false);
            }

            m_currentGenome = input.GenomeData;

            for (int i = 0; i < instanceCount; i++)
            {
                GameObject.Destroy(m_inputs[i].gameObject);
            }

            finished = true;

            return(true);
        }
        public void InsertGenome(Genometype genome, bool fullyRandom = true)
        {
            m_currentGenomes.Add(genome);

            PopulateByEvolveFromGenome(fullyRandom: fullyRandom, weightRange: 10f);
        }
 public GenomeScore(Genometype _genome, float _score)
 {
     genome = _genome;
     score  = _score;
 }
 public void InsertGenome(AbstractMachineLearningGameController gameController, Genometype genome)
 {
     m_gameController = gameController;
     genomeController = new GenomeController(genome);
 }
 public void Prepare(ITraningGameControl gameControl, Genometype genome)
 {
     m_gameController = (AbstractMLGameControl)gameControl;
     genomeController = new GenomeController(genome);
 }
 public void InsertGenome(Genometype genome, bool fullyRandom = true)
 {
     m_currentGenome = genome;
     Repopulate(fullyRandom: fullyRandom);
 }