Facebook
From xxx, 3 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 84
  1.   def tournament(self, pop, evaluated_pop, tournament_size, min_func=False, max_func=False):
  2.  
  3.         copy_evaluated_pop = evaluated_pop[:]
  4.  
  5.         tour = []
  6.         division = []
  7.         i = 0
  8.  
  9.         while (i < tournament_size and len(copy_evaluated_pop) > tournament_size):
  10.             select_index = np.random.randint(len(copy_evaluated_pop) - 1)
  11.             division.append(copy_evaluated_pop[select_index])
  12.             copy_evaluated_pop = np.delete(copy_evaluated_pop, select_index)
  13.             i = i + 1
  14.             if (i == tournament_size or len(copy_evaluated_pop) == tournament_size):
  15.                 tour.append(division)
  16.                 i = 0
  17.                 division = []
  18.  
  19.         if (len(copy_evaluated_pop) <= tournament_size):
  20.             tour.append(copy_evaluated_pop)
  21.  
  22.         new_pop = []
  23.  
  24.         # selection the best from every tour
  25.         best_individuals = []
  26.         best_value_in_division = 0
  27.         for el in tour:
  28.             if max_func:
  29.                 best_value_in_division = max(el)
  30.                 new_pop.append(pop[np.argmax(el)])
  31.             if min_func:
  32.                 best_value_in_division = min(el)
  33.                 new_pop.append(pop[np.argmin(el)])
  34.  
  35.             best_individuals.append(best_value_in_division)
  36.  
  37.         return new_pop