示例#1
0
 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();
 }
示例#2
0
        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);
        }
示例#3
0
        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;
            }
        }