code: def selection_roulette_2(self):
      """
      Select the next generation using roulette
      :param self:
      :return:
      """
      FitV = self.FitV
      FitV = (FitV - FitV.min()) / (
          FitV.max() - FitV.min() + 1e-10
      ) + 0.2
      # the worst one should still has a chance to be selected
      sel_prob = FitV / FitV.sum()
      sel_index = np.random.choice(
          range(self.size_pop), size=self.size_pop, p=sel_prob
      )
      self.Chrom = self.Chrom[sel_index, :]
      return self.Chrom
  
imports: import numpy
label_desc: Use image node_id 4 for calling a global function with example usage: selection_roulette_2() and returns: self