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); }
public void Mutate() { MutateGeneList(BodyGenes, MutationChance.Value); MutateGeneList(MutationGenes, MutationChance.Value); CrossoverFunction.TryToMutate(MutationChance.Value); NetChromosome.Mutate(); }
public GeneInfo GetGeneInfo() { var dict = new GeneInfo(); dict.AddGeneList("Body", BodyGenes); dict.AddGeneList("Mutation", MutationGenes); dict.AddMiscGeneInfo(NetChromosome.GetGeneInfo()); return(dict); }
public void Randomize() { foreach (var g in MutationGenes) { g.Randomize(); } foreach (var g in BodyGenes) { g.Randomize(); } NetChromosome.Randomize(); CrossoverFunction.Randomize(); }
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); }