private void IndirectReplacementParasite(int index, TestCaseGen testCaseGen) { testCaseGen.Vector.RemoveAt(index); int newNum = Rand.Next() % VectorSize; testCaseGen.Vector.Insert(Rand.Next() % testCaseGen.Vector.Count, newNum); }
private void mate_by_method_parasite(TestCaseGen bufGen, TestCaseGen gen1, TestCaseGen gen2) { int spos = Rand.Next() % VectorSize; int spos2 = Rand.Next() % (VectorSize - spos) + spos; switch (CrosMethod) { case CrossoverMethod.SinglePoint: var start1 = gen1.Vector.GetRange(0, spos); var end1 = gen2.Vector.GetRange(spos, VectorSize - spos); bufGen.Vector = new List <int>(start1.Concat(end1)); break; case CrossoverMethod.TwoPoint: var start2 = gen1.Vector.GetRange(0, spos); var mid2 = gen1.Vector.GetRange(spos, spos2 - spos); var end2 = gen1.Vector.GetRange(spos2, VectorSize - spos2); var temp = (List <int>)start2.Concat(mid2); bufGen.Vector = new List <int>(temp.Concat(end2)); break; case CrossoverMethod.Uniform: for (int j = 0; j < VectorSize; j++) { // randomlly choose char from either gens int genToChoose = Rand.Next() % 2; bufGen.Vector[j] = (genToChoose == 0) ? gen1.Vector[j] : gen2.Vector[j]; } break; } }
private void MutateParsite(TestCaseGen testCaseGen) { switch (MutationOpt) { case MutationOperator.IndirectReplacement: IndirectReplacementParasite(Rand.Next() % VectorSize, testCaseGen); break; case MutationOperator.Exchange: int pos1 = Rand.Next() % VectorSize; int pos2 = Rand.Next() % VectorSize; var temp = testCaseGen.Vector[pos1]; testCaseGen.Vector[pos1] = testCaseGen.Vector[pos2]; testCaseGen.Vector[pos2] = temp; break; case MutationOperator.PointMutation3Times: int firstPos = Rand.Next() % VectorSize; for (int i = firstPos; i < firstPos + 3 && i < VectorSize; i++) { IndirectReplacementParasite(i, testCaseGen); } break; default: throw new Exception("the selected mutation opertator is not suported in chilis exp"); } }