コード例 #1
0
ファイル: Genome.cs プロジェクト: lukastk/EvoSim
        public Genome Clone()
        {
            var clone = new Genome();

            clone.IsFirstGeneration = IsFirstGeneration;
            clone.Parent1           = Parent1;
            clone.Parent2           = Parent2;

            foreach (var gene in BodyGenes)
            {
                clone.BodyGenes.Add((DoubleGene)gene.Clone());
            }

            foreach (var gene in MutationGenes)
            {
                clone.MutationGenes.Add((DoubleGene)gene.Clone());
            }

            if (NetChromosome != null)
            {
                clone.NetChromosome = NetChromosome.Clone();
            }

            if (CrossoverFunction != null)
            {
                clone.CrossoverFunction = (CrossoverFunction)CrossoverFunction.Clone();
            }

            return(clone);
        }
コード例 #2
0
ファイル: Genome.cs プロジェクト: lukastk/EvoSim
        public void Mutate()
        {
            MutateGeneList(BodyGenes, MutationChance.Value);
            MutateGeneList(MutationGenes, MutationChance.Value);

            CrossoverFunction.TryToMutate(MutationChance.Value);

            NetChromosome.Mutate();
        }
コード例 #3
0
ファイル: Genome.cs プロジェクト: lukastk/EvoSim
        public GeneInfo GetGeneInfo()
        {
            var dict = new GeneInfo();

            dict.AddGeneList("Body", BodyGenes);
            dict.AddGeneList("Mutation", MutationGenes);

            dict.AddMiscGeneInfo(NetChromosome.GetGeneInfo());

            return(dict);
        }
コード例 #4
0
ファイル: Genome.cs プロジェクト: lukastk/EvoSim
        public void Randomize()
        {
            foreach (var g in MutationGenes)
            {
                g.Randomize();
            }

            foreach (var g in BodyGenes)
            {
                g.Randomize();
            }

            NetChromosome.Randomize();

            CrossoverFunction.Randomize();
        }
コード例 #5
0
ファイル: Genome.cs プロジェクト: lukastk/EvoSim
        public Genome CrossoverWith(Genome g2)
        {
            Genome child = new Genome();

            child.IsFirstGeneration = false;
            child.Parent1           = this.ID;
            child.Parent2           = g2.ID;

            CrossoverFunction.Crossover(BodyGenes, g2.BodyGenes, child.BodyGenes);
            CrossoverFunction.Crossover(MutationGenes, g2.MutationGenes, child.MutationGenes);

            child.SetNetChromosome(NetChromosome.CrossoverWith(g2.NetChromosome, CrossoverFunction));

            child.CrossoverFunction = (CrossoverFunction)CrossoverFunction.CrossoverModule(g2.CrossoverFunction, CrossoverFunction);

            return(child);
        }