Trieste: our first open-source toolbox

Author Victor Picheny

Trieste is our Python library for Bayesian optimization built on TensorFlow. It has a documentation site with tutorials on how to use the library, and an API reference.

Bayesian optimization is a class of machine-learning-based optimization methods focused on black-box problems where gathering data is expensive. Its versatility makes it a suitable tool when trying to tackle a wide range of real-world decision-making problems, in fields as diverse as aircraft design, automatic machine learning, and crop selection.

Trieste (pronounced tree-est) is named after a bathyscaphe of the same name which took a team down to the Challenger Deep in the Mariana Trench, the lowest point on the Earth's surface.

This combination of human expertise and machine power pushed the boundaries of exploration, and is symbolic of our belief that the best results come when people and AI work together.

What does it do?

Trieste provides a set of Bayesian optimization algorithms, but more importantly it provides a modular framework that is easy to extend with custom algorithms and models. Flexibility is paramount to its design, and Trieste tackles complex problems and implements algorithms that depart significantly from the standard Bayesian optimization ones.

Because probabilistic models are central to Bayesian optimization, Trieste provides out-of-the-box support for the cutting-edge GPflow (Gaussian process) models. Being TensorFlow-based, GPflow and Trieste naturally leverage automatic differentiation and allow efficient use of both CPU and GPU hardware architectures. This offers us both scalability as well as flexibility, as it avoids implementation of gradients, and allows us to push the boundaries of GP modeling and Bayesian optimization.

Who is it for?

Trieste has been designed for researchers looking for a fast and flexible framework to explore new ideas and tackle challenging problems. Although we provide introductory notebooks, it does not have a high-level API to allow out-of-the-box usage.

We’re currently using it as part of the Secondmind Decision Engine to solve customer challenges where data acquisition is an active process.

Trieste in action on a constrained optimisation problem. The contour lines show the objective function to maximise (Fuel Efficiency); the red area depicts the region where the constraint is violated (knock level is too high). The circles show the observations chosen sequentially by Trieste. Left: 8 steps, middle: 15 steps, right: 26 steps.

So, you want to get involved?

We want our toolboxes to be adopted by the wider research community, and for people to enjoy working with them. We expect people who have not used Trieste before to find it easy to get started, try it out and find success in using it. We gratefully welcome all feedback and contributions.

  • Please visit our Github repository.
  • To submit a pull request, file a bug report, or make a feature request, see the contribution guidelines.
  • For more open-ended questions, or for anything else, join the community discussions on our Slack workspace.

This is the first of a series of toolboxes we will open-source.

Secondmind has been developing robust research toolboxes for several years, starting with GPflow in 2016.  These are our go-to tools to explore new research ideas, enable fast prototyping of proof of concept work, and help build mature libraries to fuel the Secondmind Decision Engine. Following Trieste, more toolboxes will be made available in the near future, so stay tuned!


Related articles

What is Stochastic Network Control?

What is Secondmind Labs?