A wide variety of problems in science can be thought of as solutions to optimization problems: the maximizing or minimizing of a function, possibly subject to constraints or penalties. In geophysics, for example, because we can never truly ``know'' the earth's subsurface properties that we wish to understand, we seek instead interpretations that are most likely in some sense. In real applications, the functions characterizing the likelihood of such interpretations are often complicated entities existing in high-dimensional spaces. Knowing just which optimization tool is appropriate to solve a given problem is half the battle. By having a varied set of tools available one might be able to ``browse'' through various choices to find the most desirable match between an algorithm and the problem at hand. Further, all optimization problems share certain basic features. They all must have some concept of a model (perhaps nothing more than a numerical array, but likely more complicated), and they all involve communication between a computational module whose job it is to update models, and an objective function, whose job it is to measure which models are good and which are bad.
Our motivation in putting together this library was threefold. First, we wanted to have a varied collection of optimization routines and realistic test functions so that we could study the computational complexity of problems of the sort encountered in geophysics. Second, we wanted to have a programming environment that facilitated the rapid development of new algorithms so that there would be maximum re-use of existing code and maximum flexibility in mating optimization codes with objective functions on a variety of hardware platforms. Finally, we wanted to encourage the development of a test-bed of geophysical optimization problems in order to stimulate interest in geophysical optimization problems among applied mathematicians.