Debugging is crucial for producing reliable software. One of the effective bug localization techniques is spectral-based fault localization. It tries to locate a buggy statement by applying an evaluation metric to program spectra and ranking program components on the basis of the score it computes. Here, we propose a restricted class of "hyperbolic" metrics, with a small number of numeric parameters. This class of functions is based on past theoretical and empirical results. We show that optimization methods such as genetic programming and simulated annealing can reliably discover effective metrics over a wide range of data sets of program spectra. We evaluate the performance for both real programs and model programs with single bugs, multiple bugs, "deterministic" bugs, and nondeterministic bugs and find that the proposed class of metrics performs as well as or better than the previous best-performing metrics over a broad range of data.