public override Genome Crossover2Point(Genome g) { EquationGenome aGene1 = new EquationGenome(); EquationGenome aGene2 = new EquationGenome(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); // Pick a random crossover point int CrossoverPoint1 = TheSeed.Next(1, (int)Length); int CrossoverPoint2 = TheSeed.Next(CrossoverPoint1, (int)Length); // normalize if (CrossoverPoint1 > CrossoverPoint2) { int temp = CrossoverPoint1; CrossoverPoint1 = CrossoverPoint2; CrossoverPoint2 = temp; } EquationGenome CrossingGene = (EquationGenome)g; for (int j = 0; j < CrossoverPoint1; j++) { aGene1.TheArray.Add(TheArray[j]); aGene2.TheArray.Add(CrossingGene.TheArray[j]); } for (int j = CrossoverPoint1; j < CrossoverPoint2; j++) { aGene1.TheArray.Add(CrossingGene.TheArray[j]); aGene2.TheArray.Add(TheArray[j]); } for (int j = CrossoverPoint2; j < Length; j++) { aGene1.TheArray.Add(TheArray[j]); aGene2.TheArray.Add(CrossingGene.TheArray[j]); } // 50/50 chance of returning gene1 or gene2 EquationGenome aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return(aGene); }
public override Genome UniformCrossover(Genome g) { EquationGenome aGene1 = new EquationGenome(); EquationGenome aGene2 = new EquationGenome(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); // swap genes randomly EquationGenome CrossingGene = (EquationGenome)g; for (int i = 0; i < Length; i++) { if (TheSeed.Next(100) % 2 == 0) { aGene1.TheArray.Add(CrossingGene.TheArray[i]); aGene2.TheArray.Add(TheArray[i]); } else { aGene1.TheArray.Add(TheArray[i]); aGene2.TheArray.Add(CrossingGene.TheArray[i]); } } // 50/50 chance of returning gene1 or gene2 EquationGenome aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return(aGene); }
public override Genome Crossover(Genome g) { EquationGenome aGene1 = new EquationGenome(); EquationGenome aGene2 = new EquationGenome(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); // Pick a random crossover point CrossoverPoint = TheSeed.Next(1, (int)Length); EquationGenome CrossingGene = (EquationGenome)g; for (int i = 0; i < CrossoverPoint; i++) { aGene1.TheArray.Add(CrossingGene.TheArray[i]); aGene2.TheArray.Add(TheArray[i]); } for (int j = CrossoverPoint; j < Length; j++) { aGene1.TheArray.Add(TheArray[j]); aGene2.TheArray.Add(CrossingGene.TheArray[j]); } // 50/50 chance of returning gene1 or gene2 EquationGenome aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return(aGene); }
public override Genome UniformCrossover(Genome g) { EquationGenome aGene1 = new EquationGenome(); EquationGenome aGene2 = new EquationGenome(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); // swap genes randomly EquationGenome CrossingGene = (EquationGenome)g; for (int i = 0; i < Length; i++) { if (TheSeed.Next(100) % 2 == 0) { aGene1.TheArray.Add(CrossingGene.TheArray[i]); aGene2.TheArray.Add(TheArray[i]); } else { aGene1.TheArray.Add(TheArray[i]); aGene2.TheArray.Add(CrossingGene.TheArray[i]); } } // 50/50 chance of returning gene1 or gene2 EquationGenome aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return aGene; }
public override Genome Crossover2Point(Genome g) { EquationGenome aGene1 = new EquationGenome(); EquationGenome aGene2 = new EquationGenome(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); // Pick a random crossover point int CrossoverPoint1 = TheSeed.Next(1, (int)Length); int CrossoverPoint2 = TheSeed.Next(CrossoverPoint1, (int)Length); // normalize if (CrossoverPoint1 > CrossoverPoint2) { int temp = CrossoverPoint1; CrossoverPoint1 = CrossoverPoint2; CrossoverPoint2 = temp; } EquationGenome CrossingGene = (EquationGenome)g; for (int j = 0; j < CrossoverPoint1; j++) { aGene1.TheArray.Add(TheArray[j]); aGene2.TheArray.Add(CrossingGene.TheArray[j]); } for (int j = CrossoverPoint1; j < CrossoverPoint2; j++) { aGene1.TheArray.Add(CrossingGene.TheArray[j]); aGene2.TheArray.Add(TheArray[j]); } for (int j = CrossoverPoint2; j < Length; j++) { aGene1.TheArray.Add(TheArray[j]); aGene2.TheArray.Add(CrossingGene.TheArray[j]); } // 50/50 chance of returning gene1 or gene2 EquationGenome aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return aGene; }
public override Genome Crossover(Genome g) { EquationGenome aGene1 = new EquationGenome(); EquationGenome aGene2 = new EquationGenome(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); // Pick a random crossover point CrossoverPoint = TheSeed.Next(1, (int)Length); EquationGenome CrossingGene = (EquationGenome)g; for (int i = 0; i < CrossoverPoint; i++) { aGene1.TheArray.Add(CrossingGene.TheArray[i]); aGene2.TheArray.Add(TheArray[i]); } for (int j = CrossoverPoint; j < Length; j++) { aGene1.TheArray.Add(TheArray[j]); aGene2.TheArray.Add(CrossingGene.TheArray[j]); } // 50/50 chance of returning gene1 or gene2 EquationGenome aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return aGene; }