class_path_and_name
Specify the module and class names of the python surrogate
Specification
Alias: None
Arguments: STRING
Description
Specify the module and class names of the python surrogate. At minimum, the class must contain the methods ‘construct’ and ‘predict’. Dakota passes to the former a matrix (num samples x num variables) of variable values and a matrix (num samples x num components) of responses to use to train the surrogate, where num components is 1 for scalar surrogates. The predict method receives a matrix (num samples x num variables) and expects a matrix (num samples x num components) of predicted values to be returned. Optional ‘gradient’ and ‘hessian’ methods are supported as well.
Examples
Use of python-based surrogates in Dakota is enabled with the model block via:
model,
id_model = 'SURR'
surrogate global,
dace_method_pointer = 'DACE'
experimental_python
class_path_and_name = "surrogate_polynomial.Surrogate"
An example python class that implements a linear regression surrogate that works for both scalar and vector-valued responses and that includes gradient and (trivial) hessian values is the following:
class Surrogate:
def __init__(self):
self.coeffs = None
def construct(self, var, resp):
var2 = np.hstack((np.ones((var.shape[0], 1)), var))
self.coeffs = np.zeros(var.shape[1])
z = np.linalg.inv(np.dot(var2.T, var2))
self.coeffs = np.dot(z, np.dot(var2.T, resp))
return
def predict(self, pts):
return self.coeffs[0]+pts.dot(self.coeffs[1:])
def gradient(self, pts):
grad = self.coeffs[1:]
return grad.T
def hessian(self, pts):
num_vals = pts.shape[1]
hess = np.zeros(shape=(num_vals, num_vals))
return hess