Source code for openmdao.surrogate_models.surrogate_model
"""
Class definition for SurrogateModel, the base class for all surrogate models.
"""
from openmdao.utils.options_dictionary import OptionsDictionary
[docs]
class SurrogateModel(object):
"""
Base class for surrogate models.
Parameters
----------
**kwargs : dict
Options dictionary.
Attributes
----------
options : <OptionsDictionary>
Dictionary with general pyoptsparse options.
trained : bool
True when surrogate has been trained.
"""
[docs]
def __init__(self, **kwargs):
"""
Initialize all attributes.
"""
self.trained = False
self.options = OptionsDictionary(parent_name=type(self).__name__)
self._declare_options()
self.options.update(kwargs)
[docs]
def train(self, x, y):
"""
Train the surrogate model with the given set of inputs and outputs.
Parameters
----------
x : array-like
Training input locations..
y : array-like
Model responses at given inputs.
"""
self.trained = True
[docs]
def predict(self, x):
"""
Calculate a predicted value of the response based on the current trained model.
Parameters
----------
x : array-like
Point(s) at which the surrogate is evaluated.
"""
if not self.trained:
msg = "{0} has not been trained, so no prediction can be made."\
.format(type(self).__name__)
raise RuntimeError(msg)
[docs]
def vectorized_predict(self, x):
"""
Calculate predicted values of the response based on the current trained model.
Parameters
----------
x : array-like
Vectorized point(s) at which the surrogate is evaluated.
"""
pass
[docs]
def linearize(self, x):
"""
Calculate the jacobian of the interpolant at the requested point.
Parameters
----------
x : array-like
Point at which the surrogate Jacobian is evaluated.
"""
pass
def _declare_options(self):
"""
Declare options before kwargs are processed in the init method.
"""
pass
[docs]
class MultiFiSurrogateModel(SurrogateModel):
"""
Base class for surrogate models using multi-fidelity training data.
Parameters
----------
**kwargs : dict
Options dictionary.
"""
[docs]
def train(self, x, y):
"""
Train the surrogate model with the given set of inputs and outputs.
Parameters
----------
x : array-like
Point(s) at which the surrogate is evaluated.
y : array-like
Model responses at given inputs.
"""
super().train(x, y)
self.train_multifi([x], [y])
[docs]
def train_multifi(self, x, y):
"""
Train the surrogate model, based on the given multi-fidelity training data.
Parameters
----------
x : list of double array_like elements
A list of arrays with the input at which observations were made, from highest
fidelity to lowest fidelity. Designs must be nested
with X[i] = np.vstack([..., X[i+1]).
y : list of double array_like elements
A list of arrays with the observations of the scalar output to be predicted,
from highest fidelity to lowest fidelity.
"""
pass