protected FormationSearchNode<SymmetricGame, Set<Action>> createNode(Set<Action> strategySpace) {
    SymmetricGame game = new ActionReducedSymmetricGame(getBase(), strategySpace);

    int total = calculateGameSize(strategySpace.size(), game.players().size());

    double epsilon = rationalizableFinder.rationalizableEpsilon(game, getBase());
    epsilon = Math.round(epsilon / tolerance) * tolerance;

    FormationSearchNode<SymmetricGame, Set<Action>> node =
        new FormationSearchNode<SymmetricGame, Set<Action>>(game, strategySpace, epsilon, total);

    return node;
  }
  public SymmetricBreadthFirstFormationSearch(
      SymmetricGame base,
      SymmetricRationalizableFinder rationalizableFinder,
      int maxQueueSize,
      double tolerance) {
    super(base, maxQueueSize);
    this.rationalizableFinder = rationalizableFinder;
    this.tolerance = tolerance;

    actions = base.getActions().toArray(new Action[0]);
  }