public void GivenSortedSubsetChromosomes_WhenOnePointCrossOver_ThenShouldBeProper()
        {
            var chromosomes  = SortedSubsetTestData.CreateChromosomes();
            var random       = new PredeterminedRandom(5); //Crossover gene value
            var parameterSet = new ParameterSet();

            parameterSet.SetValue(ParameterNames.FailedCrossoverRetryCount, 0);
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var crossover = new OnePointCrossover(random, parameterSet, conflictDetectors);

            var results = crossover.Cross(chromosomes[0], chromosomes[1]);

            var result1 = results[0] as SortedSubsetChromosome;
            var result2 = results[1] as SortedSubsetChromosome;

            result1.Sections[0].Should().BeEquivalentTo(new int[] { 1, 4, 9 });
            result1.Sections[1].Should().BeEquivalentTo(new int[] { 3, 5, 7 });
            result1.Sections[2].Should().BeEquivalentTo(new int[] { 2, 6, 8 });
            result2.Sections[0].Should().BeEquivalentTo(new int[] { 3, 4, 5, 7 });
            result2.Sections[1].Should().BeEquivalentTo(new int[] { 2, 6, 8 });
            result2.Sections[2].Should().BeEquivalentTo(new int[] { 1, 9 });
        }
Ejemplo n.º 2
0
        public void SortedSubsetOperatorBase_CleanOutSections_DeleteSectionsWith0Length(int sectionIndex1, int sectionIndex2)
        {
            var originalChromosome = SortedSubsetTestData.CreateChromosome();
            var sections           = new int[originalChromosome.Sections.Length + 2][];
            var sourceIndex        = 0;

            for (int targetIndex = 0; targetIndex < sections.Length; targetIndex++)
            {
                if (targetIndex != sectionIndex1 && targetIndex != sectionIndex2)
                {
                    sections[targetIndex] = originalChromosome.Sections[sourceIndex];
                    sourceIndex++;
                }
                else
                {
                    sections[targetIndex] = new int[0];
                }
            }
            var testChromosome = new SortedSubsetChromosome(sections);

            var random            = Substitute.For <IRandom>();
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            operatorBase.CleanOutSections(testChromosome);

            testChromosome.Sections.Should().BeEquivalentTo(originalChromosome.Sections);
        }
        public void GivenSortedSubsetChromosomes_WhenOnePointCrossOver_WithConflict_ThenShouldReply()
        {
            var chromosomes = SortedSubsetTestData.CreateChromosomes();

            var random       = new PredeterminedRandom(5, 7); //Crossover gene value before and after conflicts
            var parameterSet = new ParameterSet();

            parameterSet.SetValue(ParameterNames.FailedCrossoverRetryCount, 1);
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                new PredeterminedConflictDetector(false, true, true, false, false, false, false, false, false, false)
            };
            var crossover = new OnePointCrossover(random, parameterSet, conflictDetectors);

            var results = crossover.Cross(chromosomes[0], chromosomes[1]);

            var result1 = results[0] as SortedSubsetChromosome;
            var result2 = results[1] as SortedSubsetChromosome;

            result1.Sections[0].Should().BeEquivalentTo(new int[] { 1, 4, 5, 9 });
            result1.Sections[1].Should().BeEquivalentTo(new int[] { 3, 6, 7 });
            result1.Sections[2].Should().BeEquivalentTo(new int[] { 2, 8 });
            result2.Sections[0].Should().BeEquivalentTo(new int[] { 3, 4, 7 });
            result2.Sections[1].Should().BeEquivalentTo(new int[] { 2, 5, 8 });
            result2.Sections[2].Should().BeEquivalentTo(new int[] { 1, 6, 9 });
        }
Ejemplo n.º 4
0
        public void SubsetOperatorBase_FindNewPosition_ReturnPosition(int sectionIndex, int geneValue, int expected)
        {
            var chromosome        = SortedSubsetTestData.CreateChromosome();
            var random            = Substitute.For <IRandom>();
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);
            var section      = chromosome.Sections[sectionIndex];
            var result       = operatorBase.FindNewGenePosition(section, geneValue);

            result.Should().Be(expected);
        }
Ejemplo n.º 5
0
        public void SortedSubsetOperatorBase_GetGenes_Return(int sectionIndex, int position, int count, int[] expected)
        {
            var chromosome        = SortedSubsetTestData.CreateChromosome();
            var random            = Substitute.For <IRandom>();
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            var result = operatorBase.GetGenes(chromosome, sectionIndex, position, count);

            result.Should().BeEquivalentTo(expected);
        }
Ejemplo n.º 6
0
        public void SortedSubsetOperatorBase_CountInsertableGenes_Return(int sectionIndex, int insertPosition, int firstGeneIndex, int expected)
        {
            var chromosome        = SortedSubsetTestData.CreateChromosome();
            var genesToInsert     = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
            var random            = new FastRandom(DateTime.Now.Millisecond);
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            var result = operatorBase.CountInsertableGenes(chromosome, sectionIndex, insertPosition, genesToInsert, firstGeneIndex);

            result.Should().Be(expected);
        }
Ejemplo n.º 7
0
        public void SortedSubsetOperatorBase_InsertGenesAtPositionWithConflict_ShouldReturns(bool leftConflict, bool rightConflict, bool expectedSuccess)
        {
            var geneValuesToInsert = new int[] { 10, 11, 12, 13 };
            var chromosome         = SortedSubsetTestData.CreateChromosome();
            var random             = Substitute.For <IRandom>();
            var parameterSet       = new ParameterSet();
            var conflictDetectors  = new List <INeighborhoodConflictDetector>()
            {
                new PredeterminedConflictDetector(leftConflict, rightConflict)
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            var success = operatorBase.InsertGenes(chromosome, 0, 1, geneValuesToInsert, 0, 1);

            success.Should().Be(expectedSuccess);
        }
        public void GivenSortedSubsetChromosomes_WhenOnePointCrossOver_WithConflict_ThenShouldReturnsZero()
        {
            var chromosomes = SortedSubsetTestData.CreateChromosomes();

            var random       = new PredeterminedRandom(5); //Crossover gene value
            var parameterSet = new ParameterSet();

            parameterSet.SetValue(ParameterNames.FailedCrossoverRetryCount, 0);
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                new PredeterminedConflictDetector(false, true, true)
            };
            var crossover = new OnePointCrossover(random, parameterSet, conflictDetectors);

            var results = crossover.Cross(chromosomes[0], chromosomes[1]);

            results.Count.Should().Be(0);
        }
Ejemplo n.º 9
0
        public void SortedSubsetOperatorBase_InsertGenesAtPosition_ShouldInsert(int sectionIndex, int insertPosition, int firstGeneIndex, int count)
        {
            var geneValuesToInsert = new int[] { 10, 11, 12, 13 };

            var chromosome        = SortedSubsetTestData.CreateChromosome();
            var clone             = chromosome.DeepClone();
            var random            = Substitute.For <IRandom>();
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            operatorBase.InsertGenes(chromosome, sectionIndex, insertPosition, geneValuesToInsert, firstGeneIndex, count);

            chromosome.Sections[sectionIndex].Length.Should().Be(clone.Sections[sectionIndex].Length + count);
            chromosome.Sections[sectionIndex][insertPosition].Should().Be(geneValuesToInsert[firstGeneIndex]);
            chromosome.Sections[sectionIndex][insertPosition + count - 1].Should().Be(geneValuesToInsert[firstGeneIndex + count - 1]);
        }
Ejemplo n.º 10
0
        public void GivenChromosome_WithoutConflict_ThenShouldBeReplaceRandom()
        {
            var random       = new PredeterminedRandom(1, 2, 1, 2); //possibility, sourceSection, sourcePosition, wrongTargetSection, goodTargetSection
            var parameterSet = new ParameterSet();

            parameterSet.SetValue(ParameterNames.FailedMutationRetryCount, 0);

            var chromosome        = SortedSubsetTestData.CreateChromosome();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var mutation = new ReplaceOneGeneMutation(random, parameterSet, conflictDetectors);

            var result = mutation.Mutate(chromosome);

            result.Sections[0].Should().BeEquivalentTo(new int[] { 1, 4, 5, 7 });
            result.Sections[1].Should().BeEquivalentTo(new int[] { 3, 6 });
            result.Sections[2].Should().BeEquivalentTo(new int[] { 2, 8, 9 });
        }
Ejemplo n.º 11
0
        public void GivenSortedSubsetOperatorBase_WhenDeleteSection_ThenShouldDelete(int sectionIndex)
        {
            var chromosome = SortedSubsetTestData.CreateChromosome();
            var clone      = chromosome.DeepClone();

            var random            = Substitute.For <IRandom>();
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            operatorBase.DeleteSection(chromosome, sectionIndex);

            chromosome.Sections.GetLength(0).Should().Be(2);
            if (sectionIndex < clone.Sections.GetLength(0) - 1)
            {
                chromosome.Sections[sectionIndex].Should().BeEquivalentTo(clone.Sections[sectionIndex + 1]);
            }
        }
Ejemplo n.º 12
0
        public void GivenSortedSubsetOperatorBase_WhenDeleteGenes_ThenShouldDelete(int sectionIndex, int position, int count)
        {
            var chromosome = SortedSubsetTestData.CreateChromosome();
            var clone      = chromosome.DeepClone();

            var random            = Substitute.For <IRandom>();
            var parameterSet      = new ParameterSet();
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var operatorBase = new SortedSubsetOperatorBase(random, parameterSet, conflictDetectors);

            operatorBase.DeleteGenesFromSection(chromosome, sectionIndex, position, count);

            chromosome.Sections[sectionIndex].Length.Should().Be(clone.Sections[sectionIndex].Length - count);
            if (position + count < clone.Sections[sectionIndex].Length)
            {
                chromosome.Sections[sectionIndex][position].Should().Be(clone.Sections[sectionIndex][position + count]);
            }
        }
Ejemplo n.º 13
0
        public void GivenChromosome_WithConflict_WhenReplaceOneGene_ThenShouldBeReplaceConflicted()
        {
            var random       = new PredeterminedRandom(0.5, 3, 1); //possibility, conflictIndex, targetSection
            var parameterSet = new ParameterSet();

            parameterSet.SetValue(ParameterNames.ConflictReducingProbability, 0.6);
            parameterSet.SetValue(ParameterNames.FailedMutationRetryCount, 0);
            var chromosome = SortedSubsetTestData.CreateChromosome();

            chromosome.ConflictList.Add(new GenePosition(0, 1));
            var conflictDetectors = new List <INeighborhoodConflictDetector>()
            {
                AllRightConflictDetector.Instance
            };
            var mutation = new ReplaceOneGeneMutation(random, parameterSet, conflictDetectors);

            var result = mutation.Mutate(chromosome);

            result.Sections[0].Should().BeEquivalentTo(new int[] { 1, 5, 7 });
            result.Sections[1].Should().BeEquivalentTo(new int[] { 3, 4, 6, 8 });
            result.Sections[2].Should().BeEquivalentTo(new int[] { 2, 9 });
        }