Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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");
            }
        }