public GenomeT Clone() { GenomeT genome = new GenomeT(); genome.left = left.Clone(); genome.right = right.Clone(); return(genome); }
public void EvaluateScore() { foreach (CreatOrig creature in creatures) { float score = creature.GetScore(); if (score > bestScore) { bestScore = score; bestGenome = creature.genome.Clone(); } } }
public static GenomeT RandGenome() { GenomeT g = new GenomeT(); g.left = new GenomeLegT(); g.right = new GenomeLegT(); g.left.m = Random.Range(-1f, +1f); g.left.M = Random.Range(-1f, +1f); g.left.o = Random.Range(0.1f, 2f); g.left.p = Random.Range(-2f, +2f); g.right.m = Random.Range(-1f, +1f); g.right.M = Random.Range(-1f, +1f); g.right.o = Random.Range(0.1f, 2f); g.right.p = Random.Range(-2f, +2f); return(g); }
public void CreateCreatures() { for (int i = 0; i < variations; i++) { // Mutate the genome GenomeT genome = bestGenome.Clone(); genome.Mutate(); // Instantiate the creature Vector3 position = Vector3.zero + distance * i; GameObject obj = Instantiate(prefab, position, Quaternion.identity, container.transform); CreatOrig creature = obj.transform.GetChild(0).GetChild(0).GetComponent <CreatOrig>(); creature.genome = genome; creatures.Add(creature); } }
public IEnumerator Simulation() { bestGenome = GenomeT.RandGenome(); for (int i = 1; i <= generations; i++) { curGen = i; //Added if (stop) { break; } ////////////// CreateCreatures(); yield return(new WaitForSeconds(1)); StartSimulation(); yield return(new WaitForSeconds(simulationTime)); StopSimulation(); EvaluateScore(); //Added creatures.OrderByDescending(o => o.GetScore()).ToList(); List <float> popScore = new List <float>(); foreach (CreatOrig c in creatures) { popScore.Add(c.TotDist()); } generationsL.Add(popScore); //end Add DestroyCreatures(); yield return(new WaitForSeconds(1)); } transform.GetComponent <SaveData>().saveData(generationsL); EndSim(); }