relf / cobyla

COBYLA optimizer for Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

The Fortran 77 implementation of COBYLA is buggy and challenging to maintain. Switch to the PRIMA implementation?

zaikunzhang opened this issue · comments

Hi @relf ,

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 solvers of the late Professor M.J.D. Powell. I have developed PRIMA, which is a package for solving general nonlinear optimization problems without using derivatives. It provides the reference implementation for Powell's derivative-free optimization methods, i.e., COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA.

Thank you for making COBYLA available in Rust. I note that the current version is based on the original Fortran 77 implementation. However, The Fortran 77 code of COBYLA 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.

To avoid the problems originating from the Fortran 77 code, I suggest you use the PRIMA implementation of Powell's solvers. PRIMA provides the modern implementation of the 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.

See the GitHub repo of PRIMA for more information. I will be glad to provide assistance if help is needed.

Thanks.

Best regards,
Zaikun Zhang, Ph.D. and Assistant Professor
Department of Applied Mathematics
The Hong Kong Polytechnic University
Hong Kong, China

Hi @zaikunzhang and thanks for the heads up!
For sure it would be definitely nice to get a Rust implementation from your PRIMA project.

Somehow, I followed the road you suggest here regarding transpilation, only my target was Rust and I could only start from a C implementation.
So, I would say, please let me know when you get a C implementation or even better a pure Rust implementation! 😉

Hi @relf ,

Thank you for your response. I look forward to a native C implementation, but there is no timeline for it yet. Maybe I need to hire someone for that (unless someone in the open-source community works on it as a volunteer). I have the funding, but no candidate yet.

Thanks,
Zaikun