public void GetNeigborForElementWithNoNeighbors_ReturnRandomElement(bool selectNeighborWithLeastNeighbors)
        {
            var array1 = new[] { 1, 2, 3, 4, 5 };
            var array2 = new[] { 1, 2, 3, 4, 5 };

            int got4 = 0, got5 = 0;

            for (int i = 0; i < 100; i++)
            {
                var adjacencyMatrix = new NonReapetingAdjacencyMatrix <int>(array1, array2, selectNeighborWithLeastNeighbors);
                adjacencyMatrix.GetNeighbor(1);
                adjacencyMatrix.GetNeighbor(3);

                var neighbor = adjacencyMatrix.GetNeighbor(2);
                if (neighbor == 4)
                {
                    got4++;
                }
                else if (neighbor == 5)
                {
                    got5++;
                }
                else
                {
                    Assert.Fail("We didn't get 4 or 5. Got " + neighbor);
                }
            }

            Assert.IsTrue(35 < got4);
            Assert.IsTrue(35 < got4);
        }
        public void GetNeigbor_SelectNeighborWithLeastNeighbors_Test2()
        {
            var array1 = new[] { 2, 1, 3, 4, 5 };
            var array2 = new[] { 1, 2, 3, 4, 5 };

            var adjacencyMatrix = new NonReapetingAdjacencyMatrix <int>(array1, array2, true);
            var neighbor        = adjacencyMatrix.GetNeighbor(3);

            Assert.IsTrue(neighbor == 4);
        }
        public IChromosome Crossover(IChromosome chromosome1, IChromosome chromosome2)
        {
            var vector1      = ((VectorChromosome <T>)chromosome1).GetVector();
            var vector2      = ((VectorChromosome <T>)chromosome2).GetVector();
            var length       = vector1.Length;
            var firstElement = vector1[ProbabilityUtils.GetRandomInt(0, vector1.Length)];

            var childArray = new NonReapetingAdjacencyMatrix <T>(vector1, vector2, false).Crossover(firstElement, length);

            return(new VectorChromosome <T>(childArray, mutationManager, evaluator));
        }