def _explore(self, pop):
        """Exploration phase: Find a set of candidate states based on
        the current population.

        :param pop: The starting population for this generation.
        """
        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
Exploration phase: Find a set of candidate states based on
        the current population.

        :param pop: The starting population for this generation.