Skip to content
An open source python library for scalable Bayesian optimisation.
Branch: master
Clone or download
Latest commit 0381dea Apr 14, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Minor bug fixes Feb 24, 2019
dragonfly Fixed bug with specifying constraints in code and added an example. Apr 7, 2019
examples Added two more in code examples for constrained domains Apr 7, 2019
.gitignore bug fix, add curr_acq to qinfo Apr 2, 2019
.travis.yml Fix typo Apr 8, 2019
LICENSE.txt added face recognition demo Jul 19, 2018 Minor updates Apr 14, 2019
mkdocs.yml Updated docs Mar 19, 2019
requirements-dev.txt Update requirements-dev.txt Feb 25, 2019
requirements.txt Add six to requirements.txt Jan 18, 2019 Simplify to use nosetests Feb 24, 2019 Fixed bug with specifying constraints in code and added an example. Apr 7, 2019

Dragonfly is an open source python library for scalable Bayesian optimisation.

Bayesian optimisation is used for optimising black-box functions whose evaluations are usually expensive. Beyond vanilla optimisation techniques, Dragonfly provides an array of tools to scale up Bayesian optimisation to expensive large scale problems. These include features/functionality that are especially suited for high dimensional optimisation (optimising for a large number of variables), parallel evaluations in synchronous or asynchronous settings (conducting multiple evaluations in parallel), multi-fidelity optimisation (using cheap approximations to speed up the optimisation process), and multi-objective optimisation (optimising multiple functions simultaneously).

Dragonfly is compatible with Python2 (>= 2.7) and Python3 (>= 3.5) and has been tested on Linux, macOS, and Windows platforms. For documentation, installation, and a getting started guide, see our readthedocs page. For more details, see our paper.



See here for detailed instructions on installing Dragonfly and its dependencies.

Quick Installation: If you have done this kind of thing before, you should be able to install Dragonfly via pip.

$ sudo apt-get install python-dev python3-dev gfortran # On Ubuntu/Debian
$ pip install numpy
$ pip install dragonfly-opt -v

Testing the Installation: You can import Dragonfly in python to test if it was installed properly. If you have installed via source, make sure that you move to a different directory to avoid naming conflicts.

$ python
>>> from dragonfly import minimise_function
>>> # The first argument below is the function, the second is the domain, and the third is the budget.
>>> min_val, min_pt, history = minimise_function(lambda x: x ** 4 - x**2 + 0.1 * x, [[-10, 10]], 10);  
>>> min_val, min_pt
(-0.32122746026750953, array([-0.7129672]))

Due to stochasticity in the algorithms, the above values for min_val, min_pt may be different. If you run it for longer (e.g. min_val, min_pt, history = minimise_function(lambda x: x ** 4 - x**2 + 0.1 * x, [[-10, 10]], 100)), you should get more consistent values for the minimum.

If the installation fails or if there are warning messages, see detailed instructions here.


Quick Start

Dragonfly can be used directly in the command line by calling or be imported in python code via the maximise_function function in the main library. To help get started, we have provided some examples in the examples directory. See our readthedocs getting started pages (command line, Python) for examples and use cases.

Command line: Below is an example usage in the command line.

$ cd examples
$ --config synthetic/branin/config.json --options options_files/options_example.txt

In Python code: The main APIs for Dragonfly are defined in dragonfly/apis. For their definitions and arguments, see dragonfly/apis/ and dragonfly/apis/ You can import the main API in python code via,

from dragonfly import minimise_function, maximise_function
func = lambda x: x ** 4 - x**2 + 0.1 * x
domain = [[-10, 10]]
max_capital = 100
min_val, min_pt, history = minimise_function(func, domain, max_capital)
print(min_val, min_pt)
max_val, max_pt, history = maximise_function(lambda x: -func(x), domain, max_capital)
print(max_val, max_pt)

Here, func is the function to be maximised, domain is the domain over which func is to be optimised, and max_capital is the capital available for optimisation. The domain can be specified via a JSON file or in code. See here, here, here, here, here, here, here, here, and here for more detailed examples.

For a comprehensive list of uses cases, including multi-objective optimisation, multi-fidelity optimisation, neural architecture search, and other optimisation methods (besides Bayesian optimisation), see our readthe docs pages (command line, Python).



Kirthevasan Kandasamy: github, webpage
Karun Raju Vysyaraju: github, linkedin
Willie Neiswanger: github, webpage
Biswajit Paria: github, webpage
Chris Collins: github, webpage


Research and development of the methods in this package were funded by DOE grant DESC0011114, NSF grant IIS1563887, the DARPA D3M program, and AFRL.


If you use any part of this code in your work, please cite this manuscript.

    title={{Tuning Hyperparameters without Grad Students: Scalable and Robust Bayesian
            Optimisation with Dragonfly}},
    author={Kandasamy, Kirthevasan and Vysyaraju, Karun Raju and Neiswanger,
            Willie and Paria, Biswajit and Collins, Christopher R. and Schneider, Jeff and
            Poczos, Barnabas and Xing, Eric P},
    journal={arXiv preprint arXiv:1903.06694},


This software is released under the MIT license. For more details, please refer LICENSE.txt.

For questions, please email

"Copyright 2018-2019 Kirthevasan Kandasamy"

You can’t perform that action at this time.