GDOC (pronounced G-DOC) is an open source software library for global optimization of problems with ordinary differential equations (ODEs) embedded. It can be used to solve optimization problems of the form
subject to
where p∈P⊂Rnp are the decision variables; the state variables x(t,p)∈Rnx are the solutions of an initial value problem (IVP) in ODEs; and J(p) is the objective function. The right-hand side f(t,x,p) of the differential equations can be nonlinear and J(p) can be nonconvex. An important special case is finding the globally optimal parameters in least-squares fitting problems, where the model is an IVP in ODEs. This is most valuable when one cannot find a good fit using conventional local optimization. Click here for examples from chemical kinetics.
GDOC employs a branch-and-bound algorithm to guarantee convergence to a global solution in the Euclidean space . Within this framework, an upper bounding problem and a lower bounding relaxation must be derived and solved at each node in the branch-and-bound tree. In GDOC, an upper bound is computed by solving the original problem locally. Determining a lower bound at each node is more complicated. As is typical with branch-and-bound algorithms, GDOC constructs and solves a convex relaxation for the lower bounding problem. We refer the interested reader to the references [1,2,3,4] for a thorough description of the theory.
The two major modules contained in GDOC are the gdoc-compiler and the GDOC command line interface (GDOC-CLI). In addition to this, the distribution contains a branch-and-bound code (libBandB-3.2 [5]), a numerical integrator (CVODES [6] – with discontinuity locking extensions), and an interface to various LP (libMILPSLV-0.9) and NLP (libNLPSLV-0.2) solvers, including LPSOLVE, IPOPT, NLPQL and SNOPT. It should be noted that each of these modules is meant to be interchangeable, and some interchange may be necessary due to various licensing restrictions.