PDFO: Powell's Derivative-Free Optimization solvers

Interfaces by Tom M. Ragonneau and Zaikun Zhang for using the late Professor M. J. D. Powell's derivative-free optimization solvers.
640 Downloads
Updated 3 Jun 2024
(More information is available at the homepage of PDFO: https://www.pdfo.net ; the paper describing PDFO is available at https://arxiv.org/abs/2302.13246 ; check also PRIMA at http://www.libprima.net )
PDFO (Powell's Derivative-Free Optimization solvers) is a cross-platform package providing interfaces for using the late Professor M. J. D. Powell's derivative-free optimization solvers, including UOBYQA, NEWUOA, BOBYQA, LINCOA, and COBYLA, which were originally implemented in Fortran 77.
PDFO provides a MATLAB function named pdfo. It can automatically identify the type of your problem and then call one of Powell's Fortran solvers.
The pdfo function is designed to be compatible with the fmincon function available in the Optimization Toolbox of MATLAB. You can call pdfo in the same way as calling fmincon:
x = pdfo(fun, x0)
x = pdfo(fun, x0, A, b)
x = pdfo(fun, x0, A, b, Aeq, beq)
x = pdfo(fun, x0, A, b, Aeq, beq, lb, ub)
x = pdfo(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon)
x = pdfo(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)
x = pdfo(problem) % PROBLEM is a structure defining the optimization problem
[x, fval] = pdfo(___)
[x, fval, exitflag, output] = pdfo(___)
In addition, pdfo can be called in some flexible ways that are not supported by fmincon. If your problem can be solved by fmincon without specifying the derivatives, then it can probably be better solved by pdfo; if your problem cannot be solved by fmincon, then try pdfo.
Professor Powell ( https://en.wikipedia.org/wiki/Michael_J._D._Powell ) devised these derivative-free optimization solvers to tackle general nonlinear optimization problems of continuous variables with or without constraints using only function values but not derivatives of the objective function or nonlinear constraint functions. In practice, such functions are often black boxes defined by simulations. Consequently, the corresponding optimization problems are often categorized as black-box optimization or simulation-based optimization. Problem specified by explicit formulas can probably be handled by other methods more efficiently. UOBYQA and NEWUOA can solve unconstrained problems, NEWUOA being preferable except for rather small problems; BOBYQA can solve unconstrained and bound-constrained problems; LINCOA can solve unconstrained, bound-constrained, and linearly constrained problems; COBYLA, which is not recommended unless nonlinear constraints are present, can solve general nonlinear optimization problems. See the Decision Tree for Optimization Software for more information.
The current version of PDFO supports MATLAB and Python. It relies on MEX for MATLAB and F2PY for Python to compile the Fortran solvers and wrap them into user-friendly functions.
Based on Professor Powell's Fortran code, PDFO is developed by Tom M. Ragonneau and Zaikun Zhang at the Department of Applied Mathematics, the Hong Kong Polytechnic University.
For more information, see the homepage of PDFO: https://www.pdfo.net .
PDFO is dedicated to the late Professor M. J. D. Powell FRS (1936--2015).

Cite As

T. M. Ragonneau and Z. Zhang, "PDFO: A Cross-Platform Package for Powell's Derivative-Free Optimization Solver", arXiv preprint arXiv:2302.13246 (2023)

MATLAB Release Compatibility
Created with R2020a
Compatible with R2014a and later releases
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

matlab/examples

matlab/interfaces

matlab/interfaces/private

Version Published Release Notes
2.2.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v2.2.0

2.1.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v2.1.0

2.0.2

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v2.0.2

2.0.1.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v2.0.1

2.0.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v2.0.0

1.3.1.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v1.3.1

1.3.0.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v1.3

1.2.1

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v1.2.1

1.2

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v1.2

1.1

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v1.1

1.0

See release notes for this release on GitHub: https://github.com/pdfo/pdfo/releases/tag/v1.0

0.9

To view or report issues in this GitHub add-on, visit the GitHub Repository.
To view or report issues in this GitHub add-on, visit the GitHub Repository.