'Update the current covariance matrix strategy from the
*population*.
:param population: A list of individuals from which to update the
parameters.'

def update(self, population):

    population.sort(key=(lambda ind: ind.fitness), reverse=True)
    lambda_succ = sum(((self.parent.fitness <= ind.fitness) for ind in population))
    p_succ = (float(lambda_succ) / self.lambda_)
    self.psucc = (((1 - self.cp) * self.psucc) + (self.cp * p_succ))
    if (self.parent.fitness <= population[0].fitness):
        x_step = ((population[0] - numpy.array(self.parent)) / self.sigma)
        self.parent = copy.deepcopy(population[0])
        if (self.psucc < self.pthresh):
            self.pc = (((1 - self.cc) * self.pc) + (sqrt((self.cc * (2 - self.cc))) * x_step))
            self.C = (((1 - self.ccov) * self.C) + (self.ccov * numpy.outer(self.pc, self.pc)))
        else:
            self.pc = ((1 - self.cc) * self.pc)
            self.C = (((1 - self.ccov) * self.C) + (self.ccov * (numpy.outer(self.pc, self.pc) + ((self.cc * (2 - self.cc)) * self.C))))
    self.sigma = (self.sigma * exp((((1.0 / self.d) * (self.psucc - self.ptarg)) / (1.0 - self.ptarg))))
    self.A = numpy.linalg.cholesky(self.C)
