# The Merlin Optimization EnvironmentAn Introduction

Multidimensional minimization is a common procedure needed in many fields. A variety of problems in engineering, physics, chemistry, etc, are frequently reduced to ones of minimizing a function of many variables. For instance we refer to systems of non-linear equations, to variational methods, to curve fitting and to the training of neural networks. Minimizing a multidimensional function faces a lot of difficulties. There is no single method that can tackle all problems in a satisfactory way. It has been realized that one needs a strategy, combining different methods, to efficiently handle a wide spectrum of problems. The presence of constraints, even of simple ones, enhances the difficulty. Many algorithms require evaluation of the gradient and this imposes additional problems since it is not always straightforward to code it and so one resorts to approximating the derivatives using differencing, that in turn costs in computing time as well as in accuracy.

Merlin is an integrated environment designed to solve optimization problems. It is devised to be easy-to-use, and implemented so as to be portable among different platforms. Another feature is that Merlin is open, i.e. a plug-in mechanism is provided so that others can easily embed their own code modules.

Merlin handles the following category of problems:

Find a local minimum of the function:

f (x),      x RN,     x = [ x1, x2, ..., xN ]T

under the conditions:

xi [ ai, bi ]      for    i = 1, 2, ..., N
Special merit has been taken for problems where the objective function can be written as sum of squares ie:

f (x) = fi2 (x)

This form is particularly suited when one needs to fit data points using a model function. One then minimizes the chisquare which is of the above form. In that case Merlin can calculate parabolic estimates of the confidence intervals for the model parameters as well as partial covariance matrices.

Merlin can be used both interactively and in batch. Interactively the user drives Merlin by entering commands through the keyboard. In batch Merlin reads commands from an input command file. Interactively Merlin is tolerant to errors in input and issues appropriate warning messages, while in batch aborts. There are various commands at the user's disposal that either invoke minimization algorithms or perform other auxiliary operations.

Merlin is programmable. Its programming language, MCL (Merlin Control Language), is a high level, easy to learn language. The MCL compiler takes as input a strategy (coded in MCL) and produces as output a file that contains commands that can steer Merlin appropriately. Merlin and MCL are both written in ANSI Fortran 77 to guarantee portability.