internal static Tuple2 <Chromosome> CrossOverChromosomes(Chromosome a, Chromosome b) { Debug.Assert(a.NetworkType == b.NetworkType); Debug.Assert(a.OrderInMixture == b.OrderInMixture); Func <Gene, Gene, Tuple2 <Gene> > crossGenes = (x, y) => { Debug.Assert(x.Name == y.Name); return(QuqeUtil.WithProb(0.5) ? Tuple2.Create(x, y) : Tuple2.Create(y, x)); }; return(CrossOver(a.Genes, b.Genes, crossGenes, genes => new Chromosome(a.NetworkType, genes, a.OrderInMixture))); }
public static Vec MakeRandomWeights(int size) { return(QuqeUtil.MakeRandomVector(size, -1, 1)); }
static Gene MutateGene(Gene g, Run run) { return(new Gene(g.Name, QuqeUtil.WithProb(run.ProtoRun.MutationRate) ? RandomGeneValue(g.GetProto(run)) : g.Value)); }