code: def _explore(self, pop):
          
          new_pop = set(pop)
          exploration_per_state = self.args.max_exploration // len(pop)
  
          mutations = []
          if self.args.brokers:
              mutations.append(self._move_partition)
          if self.args.leaders:
              mutations.append(self._move_leadership)
  
          for state in pop:
              for _ in range(exploration_per_state):
                  new_state = random.choice(mutations)(state)
                  if new_state:
                      new_pop.add(new_state)
  
          return new_pop
docs: Exploration phase: Find a set of candidate states based on
          the current population.
  
          :param pop: The starting population for this generation.