PRIMA ( www.libprima.net ) is a package for solving general nonlinear optimization problems without using derivatives. It provides the reference implementation of Powell's renowned derivative-free optimization methods, namely COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA. Powell carefully implemented these methods into publicly available solvers, which are widely used by engineers and scientists. However, Powell's implementation is in Fortran 77 and the code is nontrivial to understand or maintain, let alone extend. PRIMA aims to provide the reference implementation of these methods in modern languages, including modern Fortran (F2008 or newer), MATLAB, Python, C++, Julia, and R. It will be a faithful implementation, in the sense that the code will be mathematically equivalent to Powell’s, except for the bug fixes and improvements made intentionally. The focus is to implement these methods in a structured and modularized way so that they are understandable, maintainable, extendable, fault-tolerant, and future-proof. It will enable us to get a deeper understanding of Powell's methods and pave the way for new developments based on them.
PRIMA fixes many bugs in the original Fortran 77 implementation, and performs significantly better in terms of number of function evaluations due to the improvements made. We will introduce the current status of the project, elaborate the challenges we have encountered, and discuss future developments.