예제 #1
0
 public Genome(Chromosome ali, Chromosome coh, Chromosome rep, Chromosome obs, Chromosome bou, Chromosome rew, PathChrom pf)
 {
     Align    = ali;
     Cohesion = coh;
     Repulse  = rep;
     Obstacle = obs;
     Boundary = bou;
     Reward   = rew;
     Pathfind = pf;
 }
예제 #2
0
 public Genome()
 {
     Align    = new Chromosome();
     Cohesion = new Chromosome();
     Repulse  = new Chromosome();
     Obstacle = new Chromosome();
     Boundary = new Chromosome();
     Reward   = new Chromosome();
     Pathfind = new PathChrom();
 }
예제 #3
0
    public Genome Crossover(Genome g1, Genome g2)
    {
        Chromosome ali = Crossover(g1.Align, g2.Align);
        Chromosome coh = Crossover(g1.Cohesion, g2.Cohesion);
        Chromosome rep = Crossover(g1.Repulse, g2.Repulse);
        Chromosome obs = Crossover(g1.Obstacle, g2.Obstacle);
        Chromosome bou = Crossover(g1.Boundary, g2.Boundary);
        Chromosome rew = Crossover(g1.Reward, g2.Reward);
        PathChrom  pf  = Crossover(g1.Pathfind, g2.Pathfind);

        return(new Genome(ali, coh, rep, obs, bou, rew, pf));
    }
예제 #4
0
    public ForceTrained(int numBirds, FlockControl.RandomDelegate rp)
    {
        randomizePositions = rp;
        Chromosome ali = new Chromosome(17.845380783081056f, 4.233492851257324f, 125.07916259765625f);
        Chromosome coh = new Chromosome(18.35961151123047f, 6.671069145202637f, 240.59176635742188f);
        Chromosome rep = new Chromosome(71.6546401977539f, 8.883309364318848f, 152.1246337890625f);
        Chromosome obs = new Chromosome(100.060951232910159f, 7.151443481445313f, 167.235451232f);
        Chromosome bou = new Chromosome(0.0f, 6.893937110900879f, 159.00930786132813f);
        Chromosome rew = new Chromosome(66.051513671875f, 1.0f, 354.618896484375f);
        PathChrom  pf  = new PathChrom();       // Not using pathfinding

        trainedGenome = new Genome(ali, coh, rep, obs, bou, rew, pf);
    }
예제 #5
0
    public PathChrom Crossover(PathChrom p1, PathChrom p2)
    {
        float sm = Random.Range(-STEP_MUT, STEP_MUT) * mutationRate;
        float s  = (Random.value > .5f ? p1.Steps : p2.Steps) + sm;

        float cm = Random.Range(-CARRY_MUT, CARRY_MUT) * mutationRate;
        float c  = (Random.value > .5f ? p1.Carryover : p2.Carryover) + cm;

        float vm = Random.Range(-VIEW_MUT, VIEW_MUT) * mutationRate;
        float v  = (Random.value > .5f ? p1.View : p2.View) + vm;

        Chromosome cr = Crossover(p1.Chrom, p2.Chrom);

        return(new PathChrom(cr, s, c, v));
    }