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); }