SMT: Surrogate Modeling Toolbox

The surrogate modeling toolbox (SMT) is an open-source Python package consisting of libraries of surrogate modeling methods (e.g., radial basis functions, kriging), sampling methods, and benchmarking problems. SMT is designed to make it easy for developers to implement new surrogate models in a well-tested and well-document platform, and for users to have a library of surrogate modeling methods with which to use and compare methods.

The code is available open-source on GitHub.

Cite us

To cite SMT: M. A. Bouhlel and J. T. Hwang and N. Bartoli and R. Lafage and J. Morlier and J. R. R. A. Martins. A Python surrogate modeling framework with derivatives. Advances in Engineering Software, 2019.

@article{SMT2019,
        Author = {Mohamed Amine Bouhlel and John T. Hwang and Nathalie Bartoli and Rémi Lafage and Joseph Morlier and Joaquim R. R. A. Martins},
        Journal = {Advances in Engineering Software},
        Title = {A Python surrogate modeling framework with derivatives},
        pages = {102662},
        year = {2019},
        issn = {0965-9978},
        doi = {https://doi.org/10.1016/j.advengsoft.2019.03.005},
        Year = {2019}}

Focus on derivatives

SMT is meant to be a general library for surrogate modeling (also known as metamodeling, interpolation, and regression), but its distinguishing characteristic is its focus on derivatives, e.g., to be used for gradient-based optimization. A surrogate model can be represented mathematically as

\[y = f(\mathbf{x}, \mathbf{xt}, \mathbf{yt}),\]

where \(\mathbf{xt} \in \mathbb{R}^{nt \times nx}\) contains the training inputs, \(\mathbf{yt} \in \mathbb{R}^{nt}\) contains the training outputs, \(\mathbf{x} \in \mathbb{R}^{nx}\) contains the prediction inputs, and \(y \in \mathbb{R}\) contains the prediction outputs. There are three types of derivatives of interest in SMT:

  1. Derivatives (\({dy}/{dx}\)): derivatives of predicted outputs with respect to the inputs at which the model is evaluated.
  2. Training derivatives (\({dyt}/{dxt}\)): derivatives of training outputs, given as part of the training data set, e.g., for gradient-enhanced kriging.
  3. Output derivatives (\({dy}/{dyt}\)): derivatives of predicted outputs with respect to training outputs, representing how the prediction changes if the training outputs change and the surrogate model is re-trained.

Not all surrogate modeling methods support or are required to support all three types of derivatives; all are optional.