public ArrayChromosome(ArrayChromosome source) : base(source.Population) { this.randomGenerators = source.randomGenerators; this.MutationBalancer = source.MutationBalancer; this.CrossoverBalancer = source.CrossoverBalancer; this.arrayParameter = (ArrayParameter)source.arrayParameter.Clone(); }
protected void PointCrossover(ArrayChromosome p) { // crossover point var crossOverPoint = Rand.Next((int)(this.Length - 1)) + 1; var crossOverLength = this.Length - crossOverPoint; // temporary array var temp = new double[crossOverLength]; System.Array.Copy(this.arrayParameter, crossOverPoint, temp, 0, crossOverLength); System.Array.Copy(p.arrayParameter, crossOverPoint, this.arrayParameter, crossOverPoint, crossOverLength); System.Array.Copy(temp, 0, p.arrayParameter, crossOverPoint, crossOverLength); }
protected void ApproximateCrossover(ArrayChromosome p) { var pairVal = p.arrayParameter; var factor = Rand.NextDouble(); if (Rand.Next(2) == 0) { factor = -factor; } for (var i = 0; i < this.Length; i++) { var portion = (this.arrayParameter[i] - pairVal[i]) * factor; this.arrayParameter[i] -= portion; pairVal[i] += portion; } }