docs: def computeParams(self, params):
          """Computes the parameters depending on :math:`\lambda`.
  
          Notes
          -----
          It needs to be called again if :math:`\lambda` changes during
          evolution.
  
          Parameters
          ----------
          params:
              A dictionary of the manually set parameters.
          """
          self.mu = params.get("mu", int(self.lambda_ / 2))
          rweights = params.get("weights", "superlinear")
          if rweights == "superlinear":
              self.weights = numpy.log(self.mu + 0.5) - \
                  numpy.log(numpy.arange(1, self.mu + 1))
          elif rweights == "linear":
              self.weights = self.mu + 0.5 - numpy.arange(1, self.mu + 1)
          elif rweights == "equal":
              self.weights = numpy.ones(self.mu)
          else:
              raise RuntimeError("Unknown weights : %s" % rweights)
  
          self.weights /= sum(self.weights)
          self.mueff = 1. / sum(self.weights ** 2)
  
          self.cc = params.get("ccum", 4. / (self.dim + 4.))
          self.cs = params.get("cs", (self.mueff + 2.) /
                               (self.dim + self.mueff + 3.))
          self.ccov1 = params.get(
              "ccov1", 2. / ((self.dim + 1.3) ** 2 + self.mueff))
          self.ccovmu = params.get("ccovmu", 2. * (
              self.mueff - 2. + 1. / self.mueff) / (
              (self.dim + 2.) ** 2 + self.mueff))
          self.ccovmu = min(1 - self.ccov1, self.ccovmu)
          self.damps = 1. + 2. * \
              max(0, numpy.sqrt((self.mueff - 1.) / (self.dim + 1.)) - 1.) + \
              self.cs
          self.damps = params.get("damps", self.damps)
          return