This isn't working quite right, since self.best_cost starts at np.inf, we never beat it when self.higher_is_better is True.