public IOptimizationResults <T> Evolve( )
        {
            if (this.AlgebraProvider == null)
            {
                throw new ArgumentNullException("The Rosenbrock optimizer must have its AlgebraProvider property not set to 'null'");
            }
            currentPoint = startingPoint;
            IBase   b           = createNewBase(currentPoint);
            IVector stepsLength = b.CreateVector( );

            for (int i = 0; i < stepsLength.Length; i++)
            {
                stepsLength[i] = initialStep;
            }
            List <IObjectiveScores <T> > scores = new List <IObjectiveScores <T> >();

            while (!terminationCondition.IsFinished() && !isCancelled)
            {
                var endOfStage = performStage(b, currentPoint, stepsLength);
                b            = endOfStage.Item1;
                currentPoint = endOfStage.Item2;
                scores.AddRange(endOfStage.Item3);
            }
            //return new BasicOptimizationResults<T>( new IObjectiveScores<T>[] { currentPoint } );
            return(new BasicOptimizationResults <T>(scores.ToArray()));
        }