This is Dr. Zaikun Zhang from the Hong Kong Polytechnic University. Together with Professor N.I.M. Gould, I am responsible for maintaining the derivative-free optimization (DFO) solvers of the late Professor M.J.D. Powell. I am the author of PRIMA, which provides the modernized reference implementation for these solvers.
Thank you for making COBYLA and NEWUOA available in Nevergrad. I note that the current version is based on the original Fortran 77 implementation, which is not maintained anymore.
Although the Fortran 77 code is truly a masterpiece, it contains many bugs, most of which are due to the language itself. For example, see Section 4.4 of our recent paper and the GitHub issues / requests listed below.
The Fortran 77 solvers may get stuck in infinite loops.
Fortran 77 COBYLA may not return the best point that is evaluated; sometimes, the returned point can have a
large constraint violation even though the starting point is feasible.
To avoid the problems originating from the Fortran 77 code, I suggest you use the PRIMA implementation of Powell‘s solvers.
PRIMA provides the reference implementation for Powell's renowned derivative-free optimization methods, namely COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA. The current version of PRIMA implements these solvers in Fortran 2008. It fixes bugs in the original Fortran 77 code. In addition, it introduces improvements that boost the performance in terms of the number of function evaluations, which is the standard measure of computational costs in derivative-free optimization.
I also note that there was an interest to include BOBYQA into Nevergrad, but it was not possible due to the license. PRIMA is licensed under the 3-Clause BSD, which I suppose is compatible with MIT.
Dear Nevergrad maintainers,
This is Dr. Zaikun Zhang from the Hong Kong Polytechnic University. Together with Professor N.I.M. Gould, I am responsible for maintaining the derivative-free optimization (DFO) solvers of the late Professor M.J.D. Powell. I am the author of PRIMA, which provides the modernized reference implementation for these solvers.
Thank you for making COBYLA and NEWUOA available in Nevergrad. I note that the current version is based on the original Fortran 77 implementation, which is not maintained anymore.
Although the Fortran 77 code is truly a masterpiece, it contains many bugs, most of which are due to the language itself. For example, see Section 4.4 of our recent paper and the GitHub issues / requests listed below.
The Fortran 77 solvers may get stuck in infinite loops.
https://github.com/scipy/scipy/issues/8998
https://github.com/scipy/scipy/issues/15527
https://github.com/stevengj/nlopt/issues/370
https://github.com/stevengj/nlopt/issues/118
https://github.com/stevengj/nlopt/issues/117
https://github.com/openturns/openturns/issues/1651
https://github.com/astamm/nloptr/issues/25
https://github.com/cureos/csnumerics/issues/7
https://github.com/xypron/jcobyla/issues/3
https://github.com/libprima/prima/issues/98
The Fortran 77 solvers may crash with segmentation faults due to uninitialized variables that are used as indices.
https://github.com/stevengj/nlopt/issues/134
https://github.com/stevengj/nlopt/issues/133
https://github.com/stevengj/nlopt/issues/36
Fortran 77 COBYLA may not return the best point that is evaluated; sometimes, the returned point can have a large constraint violation even though the starting point is feasible.
https://github.com/stevengj/nlopt/issues/182
https://github.com/stevengj/nlopt/issues/110
https://github.com/stevengj/nlopt/issues/57
https://github.com/cureos/jcobyla/issues/1
Expected Results
To avoid the problems originating from the Fortran 77 code, I suggest you use the PRIMA implementation of Powell‘s solvers.
PRIMA provides the reference implementation for Powell's renowned derivative-free optimization methods, namely COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA. The current version of PRIMA implements these solvers in Fortran 2008. It fixes bugs in the original Fortran 77 code. In addition, it introduces improvements that boost the performance in terms of the number of function evaluations, which is the standard measure of computational costs in derivative-free optimization.
I also note that there was an interest to include BOBYQA into Nevergrad, but it was not possible due to the license. PRIMA is licensed under the 3-Clause BSD, which I suppose is compatible with MIT.
See the GitHub repo of PRIMA for more information. I will be glad to assist if help is needed.
Thanks.
Best regards, Zaikun Zhang, Ph.D. and Assistant Professor Department of Applied Mathematics The Hong Kong Polytechnic University