Beispiel #1
0
    public GenomeT Clone()
    {
        GenomeT genome = new GenomeT();

        genome.left  = left.Clone();
        genome.right = right.Clone();
        return(genome);
    }
Beispiel #2
0
 public void EvaluateScore()
 {
     foreach (CreatOrig creature in creatures)
     {
         float score = creature.GetScore();
         if (score > bestScore)
         {
             bestScore  = score;
             bestGenome = creature.genome.Clone();
         }
     }
 }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    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);
        }
    }
Beispiel #5
0
    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();
    }