'get new candidate solutions, sampled from a multi-variate
normal distribution and transformed to f-representation
(phenotype) to be evaluated.
Arguments
`number`
number of returned solutions, by default the
population size ``popsize`` (AKA ``lambda``).
`xmean`
distribution mean
`sigma`
multiplier for internal sample width (standard
deviation)
Return
A list of N-dimensional candidate solutions to be evaluated
Example
>>> import cma
>>> es = cma.CMAEvolutionStrategy([0,0,0,0], 0.3)
>>> while not es.stop() and es.best.f > 1e-6:  # my_desired_target_f_value
...     X = es.ask()  # get list of new solutions
...     fit = [cma.fcts.rosen(x) for x in X]  # call function rosen with each solution
...     es.tell(X, fit)  # feed values
:See: `ask_and_eval`, `ask_geno`, `tell`'

def ask(self, number=None, xmean=None, sigma_fac=1):

    pop_geno = self.ask_geno(number, xmean, sigma_fac)
    pop_pheno = [self.gp.pheno(x, copy=True, bounds=self.gp.bounds) for x in pop_geno]
    if ((not self.gp.isidentity) or use_sent_solutions):
        if (((self.countiter % 30) / (self.popsize ** 0.5)) < 1):
            self.sent_solutions.truncate(0, ((self.countiter - 1) - ((3 * self.N) / (self.popsize ** 0.5))))
        for i in xrange(len(pop_geno)):
            self.sent_solutions[pop_pheno[i]] = {'geno': pop_geno[i], 'pheno': pop_pheno[i], 'iteration': self.countiter}
    return pop_pheno
