Skip to main content

PDFO: Powell's Derivative-Free Optimization solvers

Introduction | Python | MATLAB | Citing PDFO | Acknowledgments

Dedicated to the late Professor M. J. D. Powell FRS (1936–2015).

GitHub Workflow Status GitHub GitHub release (latest SemVer) PyPI - Downloads View PDFO: Powell's Derivative-Free Optimization solvers on File Exchange

Introduction

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. See the PDFO homepage and the PDFO paper for more information.

This package makes use of a modified version of Powell's Fortran code. See the folder original under fsrc for Powell's original code.

Python version of PDFO

Installation

To use the Python version of PDFO on Linux, Mac, or Windows, you need Python (version 3.8 or above).

It is highly recommended to install PDFO via PyPI.

Install pip in your system if you Python version does not include it. Then execute

pip install pdfo

in a command shell (e.g., the terminal for Linux and macOS, or the Command Shell for Windows). If your pip launcher is not pip, adapt the command accordingly (it may be pip3 for example). If this command runs successfully, PDFO is installed. You may verify the installation by

python -m unittest pdfo.testpdfo

Once again, if your Python launcher is not python, adapt the command accordingly (it may be python3 for example). If you are an Anaconda user, PDFO is also available through the conda installer ( https://anaconda.org/conda-forge/pdfo ). However, it is not managed by us.

Alternative installation (using source distribution)

Alternatively, although deeply discouraged, PDFO can be installed from the source code. It requires you to install additional Python headers, a Fortran compiler (e.g., gfortran), and F2PY (provided by NumPy). Download and decompress the source code package, or clone it from GitHub or Gitee. You will obtain a folder containing pyproject.toml; in a command shell, change your directory to this folder; then install PDFO by executing

pip install .

Usage

PDFO provides a Python function pdfo, which can solve general constrained or unconstrained optimization problems without using derivatives.

The pdfo function can automatically identify the type of your problem and then call one of Powell’s solvers, namely COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA. The user can also specify the solver by setting the method field of the options passed to pdfo.

The pdfo function is designed to be compatible with the scipy.optimize.minimize function of SciPy. You can call pdfo in exactly the same way as calling scipy.optimize.minimize except that pdfo does not accept derivative arguments.

For the detailed syntax of pdfo, use the standard help command of Python:

from pdfo import pdfo
help(pdfo)

Uninstall

PDFO can be uninstalled by executing the following command in a command shell:

python3 -m pip uninstall pdfo

MATLAB version of PDFO

Prerequisites

PDFO supports MATLAB R2014a and later releases. To use PDFO, you need first set up the MEX of your MATLAB so that it can compile Fortran. The setup of MEX is a pure MATLAB usage problem and it has nothing to do with PDFO.

To see whether your MEX is ready, run the following code in MATLAB:

mex('-setup', '-v', 'fortran'); mex('-v', fullfile(matlabroot, 'extern', 'examples', 'refbook', 'timestwo.F'));

If this completes successfully, then your MEX is ready. Otherwise, it is not, and you may try the setup_mex package at

https://github.com/equipez/setup_mex

It will help you to set MEX up on Windows or macOS (the setup of MEX is trivial on Linux). In case setup_mex does not work, you need to consult a local MATLAB expert or the technical support of MathWorks about "how to set up MEX", which is not part of PDFO.

Installation

Download and decompress the source code package, or clone it from GitHub or Gitee. You will obtain a folder containing setup.m. Place this folder at the location where you want PDFO to be installed. In MATLAB, change the directory to this folder, and execute the following command:

setup

If this command runs successfully, PDFO is installed. You may execute the following command in MATLAB to verify the installation:

testpdfo

Usage

PDFO provides a MATLAB function pdfo, which can solve general constrained or unconstrained optimization problems without using derivatives.

The pdfo function can automatically identify the type of your problem and then call one of Powell’s solvers, namely COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA. The user can also specify the solver by setting the solver field of the options passed to pdfo.

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. In addition, pdfo can be called in some flexible ways that are not supported by fmincon.

For detailed syntax of pdfo, use the standard help command of MATLAB:

help pdfo

Uninstall

PDFO can be uninstalled using the setup.m script by executing the following command in MATLAB:

setup uninstall

Citing PDFO

If you use PDFO, please cite the following paper. Note that PDFO contains improvements and bug fixes that do not exist in Powell's original code. See Subsections 4.3--4.5 of the paper for details.

[1] T. M. Ragonneau and Z. Zhang, PDFO: a cross-platform package for Powell's derivative-free optimization solvers, arXiv:2302.13246, 2023.

@misc{Ragonneau_Zhang_2023,
    title        = {{PDFO}: a cross-platform package for {Powell}'s derivative-free optimization solvers},
    author       = {Ragonneau, T. M. and Zhang, Z.},
    howpublished = {arXiv:2302.13246},
    year         = 2023
}

In addition, Powell’s methods can be cited as follows.

[2] M. J. D. Powell. A direct search optimization method that models the objective and constraint functions by linear interpolation. In S. Gomez and J. P. Hennart, editors, Advances in Optimization and Numerical Analysis, pages 51–67, Dordrecht, NL, 1994. Springer.

[3] M. J. D. Powell. UOBYQA: unconstrained optimization by quadratic approximation. Math. Program., 92:555–582, 2002.

[4] M. J. D. Powell. The NEWUOA software for unconstrained optimization without derivatives. In G. Di Pillo and M. Roma, editors, Large-Scale Nonlinear Optimization, volume 83 of Nonconvex Optimization and Its Applications, pages 255–297, Boston, MA, USA, 2006. Springer.

[5] M. J. D. Powell. The BOBYQA algorithm for bound constrained optimization without derivatives. Technical Report DAMTP 2009/NA06, Department of Applied Mathematics and Theoretical Physics, University of Cambridge, Cambridge, UK, 2009.

Remark: LINCOA seeks the least value of a nonlinear function subject to linear inequality constraints without using derivatives of the objective function. Powell did not publish a paper to introduce the algorithm.

Acknowledgments

PDFO is dedicated to the memory of the late Professor Powell with gratitude for his inspiration and for the treasures he left to us.

We are grateful to Professor Ya-xiang Yuan for his everlasting encouragement and support.

The development of PDFO is a long-term project, which would not be sustainable without the continued funds from the Hong Kong Research Grants Council (ref. PolyU 253012/17P, PolyU 153054/20P, and PolyU 153066/21P), the Hong Kong Ph.D. Fellowship Scheme (ref. PF18-24698), and the Hong Kong Polytechnic University (PolyU), in particular the Department of Applied Mathematics (AMA).

Metadata

Release files for pdfo 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pdfo 2.0.0
File Size Uploaded
pdfo-2.0.0.tar.gz 484.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pdfo 2.0.0
File
pdfo-2.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
pdfo-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
pdfo-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.9+ x86-64 Details
pdfo-2.0.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
pdfo-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
pdfo-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details
pdfo-2.0.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
pdfo-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
pdfo-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
pdfo-2.0.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
pdfo-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
pdfo-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details
pdfo-2.0.0-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
pdfo-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64 Details
pdfo-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.9+ x86-64 Details

Total release size: 29.2 MB

Release files / pdfo-2.0.0.tar.gz

Download URL pdfo-2.0.0.tar.gz
Size 484.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c5ccd0a1127365c50a02403cf87f3650a73ff21bb316333139ebbcfa3a96e0f4
BLAKE2b-256 checksum
How to use checksums
6b28593aa44824af43b3f550ce3a95003bdcf59083a5f42065cc19e47cad818c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp312-cp312-win_amd64.whl

Download URL pdfo-2.0.0-cp312-cp312-win_amd64.whl
Size 2.4 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
a0355b1f1112858bc2943abe694f472abe73636f0b8ce7c051fc79622dfb7e5e
BLAKE2b-256 checksum
How to use checksums
ae08eecbc87651752d8594082b77a60d0413a9476670f96f466e04d6afa7fbb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pdfo-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.5 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
74fad3cac35c2606705bdadebcdb6d6feb0ec0828bef63fc7e34c3241b801353
BLAKE2b-256 checksum
How to use checksums
70347c808d8eb9f71ca362726c1f74dd38e434c64d571a37add6c517390d16ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl

Download URL pdfo-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl
Size 1.9 MB
Tags CPython 3.12 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
6771dc652e34a93ccd8d659e56ff128da6ecb0c0ee5f80781c7acbe1a878a293
BLAKE2b-256 checksum
How to use checksums
21c4a5a1f047a98784384c46daae2c801e56ed7420a9a33183a035b6ccda06ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp311-cp311-win_amd64.whl

Download URL pdfo-2.0.0-cp311-cp311-win_amd64.whl
Size 2.4 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
a528e14c6c0baf3908eb6093a396e2d35eb974043db331c6a11fb87168e4f31c
BLAKE2b-256 checksum
How to use checksums
26b2162f545f0595f44cef6aaaed0dddedd5a4b2a2051f4448fa76091d252af7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pdfo-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
86dec08cfd06514a557ee92ae90872694e4140ca9b804a7d03ee42595aaa0676
BLAKE2b-256 checksum
How to use checksums
4fac1d273d3a012e872aae63216e9e96086098f7f38be64e7bfa0f9ec6d4fd57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl

Download URL pdfo-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Size 1.8 MB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
2e0d7c83f4b895fb69c4ade9f0422ecd341923f4dc776746c451b48faf9cef75
BLAKE2b-256 checksum
How to use checksums
dd733b8f79dce6973d985b1fd568b3b190c16c49f98763407b550434aefb7299
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp310-cp310-win_amd64.whl

Download URL pdfo-2.0.0-cp310-cp310-win_amd64.whl
Size 2.4 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
60e8fe940bb9f93e288034ebf7369a7445ea5d46f6f792b34673e49cd40987c2
BLAKE2b-256 checksum
How to use checksums
95974ce0b87856803afcee3c3bfae678a6eac78bc3720ca9a6867fa9d82c4de4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pdfo-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.5 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
00cf5a92ff4961bd7afce79d0816f7afefe8220f1be3dbc987621de55e5e4b13
BLAKE2b-256 checksum
How to use checksums
77b5334ca678afc66fa44ca6f30a73f85a4b6ac2d27a820ef99f290e10f9fb19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl

Download URL pdfo-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Size 1.8 MB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
253bdffcb80652ebc57f5444b290c4adb2f141118be0d1266d74d31aa4f59bf7
BLAKE2b-256 checksum
How to use checksums
fe9d88ebd72002c4863d3a7adf3e1ea1a89756cded2eb9f405ac54a6833b135e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp39-cp39-win_amd64.whl

Download URL pdfo-2.0.0-cp39-cp39-win_amd64.whl
Size 2.4 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
515d633bc4253a8b0948530b8985900b42f5d63b3832588d3e0131d53c2fbe72
BLAKE2b-256 checksum
How to use checksums
4c1274b2810460e075a2795ca32a0e765920f2bb014be734e4bdd94434693d1a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pdfo-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.5 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f0d20a61ce025f719ec101e93058075e6ac764c6192088c8a142c9b3f5316717
BLAKE2b-256 checksum
How to use checksums
35b43f9eea7f7bfa33a1237f614e3c04e8a850cf9bdf7879bc5c2d573b922fb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl

Download URL pdfo-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Size 1.8 MB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
f82f185eae1d701fdc04d4df57722e7c9ef1555f651ef22fcb6960407ebd0eb7
BLAKE2b-256 checksum
How to use checksums
1fbc04d2c6d57205a9792e9fc25916ba94ff0c00a91b95a714902b88d86cc46e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp38-cp38-win_amd64.whl

Download URL pdfo-2.0.0-cp38-cp38-win_amd64.whl
Size 2.4 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
680461f3b3a9f0e06e81c6e70243707f26e1510b4148a8ae7fd5f8646f544a6c
BLAKE2b-256 checksum
How to use checksums
dc27059c6aae851bdbf837b641309020071d6b4f292271a0dbebf1612299267e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pdfo-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.5 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
39b2a763db9c30fd1d4addc77c40d2684dd7fb48e46eb26d722d24d12138089a
BLAKE2b-256 checksum
How to use checksums
ac2a750dabd4ac27b6d2c338d2829f7f1675314d849b07eac33b7ee40dbdf39f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / pdfo-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl

Download URL pdfo-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Size 1.8 MB
Tags CPython 3.8 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
d1c41e288fcc43bd9f5820ea35f886337bb89662f26a7b40256fa5610a1ae867
BLAKE2b-256 checksum
How to use checksums
44139fd4d803ffce5871913555a4f53083742fcf0cfa7e9381c8faff3a9b2dcf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release history Release notifications | RSS feed

This release

2.0.0 This release

16 release files

1.3.1

17 release files

1.3

17 release files

1.2

41 release files

1.1

61 release files

1.0

47 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page