Several examples follow. The first example shows a minimal specification for a single model.
model, single
The next example displays a surrogate model specification which selects a quadratic polynomial from among the global approximation methods. It uses a pointer to a design of experiments method for generating the data needed for building the global approximation, reuses any old data available for the current approximation region, and employs the first-order multiplicative approach to correcting the approximation at the center of the current approximation region.
model, id_model = 'M1' variables_pointer = 'V1' responses_pointer = 'R1' surrogate global quadratic polynomial dace_method_pointer = 'DACE' reuse_samples region correction multiplicative first_order
Finally, an advanced nested model example would be
model, id_model = 'M1' variables_pointer = 'V1' responses_pointer = 'R1' nested optional_interface_pointer = 'OI1' optional_interface_responses_pointer = 'OIR1' sub_method_pointer = 'SM1' primary_variable_mapping = '' '' 'X' 'Y' secondary_variable_mapping = '' '' 'mean' 'mean' primary_response_mapping = 1. 0. 0. 0. 0. 0. 0. 0. 0. secondary_response_mapping = 0. 0. 0. 1. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 3. 0.
model, <model independent controls> <model selection> <model dependent controls>
The <model independent controls>
are those controls which are valid for all models. Referring to dakota.input.summary, these controls are defined externally from and prior to the model selection blocks. The model selection blocks are all required group specifications separated by logical OR's, where the model selection must be single
OR surrogate
OR nested
. If a surrogate
model is specified, a secondary selection must be made for its type: global
, multipoint
, local
, or hierarchical
. The <model dependent controls>
are those controls which are only meaningful for a specific model. These controls are defined within each model selection block. Defaults for model independent and model dependent controls are defined in DataModel. The following sections provide additional detail on the model independent controls followed by the model selections and their corresponding model dependent controls.
id_model
and is used to provide a unique identifier string for use within method specifications (refer to model_pointer
in Method Independent Controls).
The type of model can be single
, nested
, or surrogate
. Each of these model specifications supports variables_pointer
and responses_pointer
strings for identifying the variables and responses specifications used in constructing the model (by cross-referencing with id_variables
and id_responses
strings from particular variables and responses keyword specifications). These pointers are valid for each model type since each model contains a set of variables that is mapped into a set of responses -- only the specifics of the mapping differ. Additional pointers are used for each model type for constructing the components of the variable to response mapping. As a strategy specification identifies one or more methods and a method specification identifies a model, a model specification identifies variables, interface, and responses specifications. This top-down flow specifies all of the object interrelationships.
For each of these pointer specifications, if a pointer string is specified and no corresponding id string is available, DAKOTA will exit with an error message. If the pointer is optional and no pointer string is specified, then the last specification parsed will be used. It is appropriate to omit optional cross-referencing whenever the relationships are unambiguous due to the presence of only one specification.
Table 6.1 provides the specification detail for the model independent controls involving identifiers, model type controls, and pointers.
Description | Keyword | Associated Data | Status | Default |
Model set identifier | id_model | string | Optional | method use of last model parsed |
Model type | single | surrogate | nested | none | Required group | N/A (single if no model specification) |
Variables set pointer | variables_pointer | string | Optional | model use of last variables parsed |
Responses set pointer | responses_pointer | string | Optional | model use of last responses parsed |
single
model case, a single interface is used to map the variables into responses. The optional interface_pointer
specification identifies this interface by cross-referencing with the id_interface
string input from a particular interface keyword specification.Table 6.2 provides the specification detail for single models.
Description | Keyword | Associated Data | Status | Default |
Interface set pointer | interface_pointer | string | Optional | model use of last interface parsed |
surrogate
model case, the specification first allows a mixture of surrogate and actual response mappings through the use of the optional id_surrogates
specification. This identifies the subset of the response functions by number that are to be approximated (the default is all functions). The valid response function identifiers range from 1 through the total number of response functions (see Function Specification). Next, the specification selects a global, multipoint, local, or hierarchical approximation. Table 6.3 provides the specification detail for surrogate models.Description | Keyword | Associated Data | Status | Default |
Surrogate response ids | id_surrogates | list of integers | Optional | All response functions are approximated |
Surrogate type selection | global | multipoint | local | hierarchical | none | Required group | N/A |
Each of these surrogate types provides an approximate representation of a "truth" model which is used to perform the parameter to response mappings. This approximation is built and updated using data from the truth model. This data is generated in some cases using a design of experiments iterator applied to the truth model (global approximations with a dace_method_pointer
). In other cases, truth model data from a single point (local, hierarchical approximations), from a few previously evaluated points (multipoint approximations), or from the restart database (global approximations with reuse_samples
) can be used. Surrogate models are used extensively in the surrogate-based optimization and least squares methods (see SurrBasedMinimizer and its derived classes and Surrogate-Based Minimization Methods), in which the goals are to reduce expense by minimizing the number of truth function evaluations and to smooth out noisy data with a global data fit. However, the use of surrogate models is not restricted in any way to optimization techniques, and in fact, the uncertainty quantification methods and optimization under uncertainty strategy are other primary users.
The following sections present the global
, multipoint
, local
, or hierarchical
specification groups in further detail.
gaussian_process
, kriging
, mars
, moving_least_squares
, neural_network
, polynomial
, or radial_basis
. These specifications invoke a gaussian process approximation, a kriging interpolation approximation (note that kriging in Dakota 5.1 has changed relative to the Dakota 5.0 version), a multivariate adaptive regression spline approximation, a moving least squares approximation, a layered perceptron artificial neural network approximation, a polynomial regression approximation, or a radial basis function approximation, respectively. In the polynomial case, the order of the polynomial (linear, quadratic, or cubic) must be specified.
In the kriging case, a vector of correlation lengths can be optionally specified in order to bypass the internal kriging calculations of correlation parameters. A correlation parameter equals one-half divided by the square of the corresponding correlation length, where the definition of correlation parameter has not changed relative to Dakota 5.0. This definition of the correlation lengths makes their effect on the behavior of the gaussian correlation function directly analogous to that of the standard deviation of a gaussian (normal) distribution. For the gaussian process approximation, the correlation parameters are always chosen by an internal global optimization procedure. The kriging model allows optional sub-specification of the method used to select the correlation lengths. The optimization_method
keyword can be followed by any of the following choices: 'global'
(this is the default), 'local'
, 'sampling'
, and 'none'
. The global optimizer is the same one used by the gaussian process approximation. However, the Kriging model searches in a much smaller "feasible region" of correlation lengths. If the 'none'
option is selected, and correlation_lengths
are not directly specified, then the center (in log scale) of the feasible region will be selected. This center is also used as the starting point for 'local'
optimization. The small feasible region typically contains small/large enough correlation lengths to include both well conditioned correlation matrices and either the globally optimal, or at least a near optimal, correlation matrix. Ill-conditioned correlation matrices are explicitly excluded from consideration based on (an estimate of) their condition number. The gaussian process deals with ill conditioning in 2 ways. First, when it encounters a non-invertible correlation matrix it iteratively increases the size of the "nugget," but in such cases the gaussian process will approximate (smooth) rather than interpolate the data. Second, the GP also has an option for point_selection
to avoid ill-conditioning when the number of points becomes large. This option calls a greedy algorithm that chooses a subset of points with which to build the gaussian process. These points are "optimal" in terms of creating a gaussian process with low prediction error. As a default, there is no point selection. Note that in general, one would not need point selection in trust-region methods because only a small number of points are used to develop a surrogate within each trust region. The point selection option will be most useful in cases where the gaussian process is built on a "large" number of points, where large is more than a hundred or a few hundred points, depending on the number of variables and the spacing of the sample points. The user can specify the trend function of the kriging and gaussian process models using the trend
keyword. For both models, the trend type can be constant
, linear
, or reduced_quadratic
; the default for both is reduced_quadratic
. The kriging approximation has the additional option of quadratic
. The reduced_quadratic
trend function includes the main effects but not mixed/interaction terms; prior to Dakota 5.1, it was selected for the gaussian process via the quadratic
option.
For each of the global surrogates, dace_method_pointer
, reuse_samples
, correction
, and use_gradients
can be optionally specified. The dace_method_pointer
specification points to a design of experiments iterator which can be used to generate truth model data for building a global data fit. The reuse_samples
specification can be used to employ old data (either from previous function evaluations performed in the run or from function evaluations read from a restart database or text file) in the building of new global approximations. The default is no reuse of old data (since this can induce directional bias), and the settings of all
, region
, and samples_file
result in reuse of all available data, reuse of all data available in the current trust region, and reuse of all data from a specified text file, respectively. The combination of new build data from dace_method_pointer
and old build data from reuse_samples
must be sufficient for building the global approximation. If not enough data is available, the system will abort with an error message. Both dace_method_pointer
and reuse_samples
are optional specifications, which gives the user maximum flexibility in using design of experiments data, restart/text file data, or both.
To assess the goodness of fit of a global surrogate, a variety of diagnostics are available for the following global approximation methods: polynomial regressions, kriging, mars, moving least squares, neural networks, and radial basis functions. The diagnostics are specified by the keyword diagnostics
, followed by a list of strings specifying the actual metrics. The diagnostic metrics available are: sum_squared
, mean_squared
, root_mean_squared
, max_squared
, sum_scaled
, max_scaled
, sum_abs
, mean_abs
, max_abs
, press
, cv
, and rsquared
. Most of these diagnostics refer to some operation on the residuals (the difference between the surrogate model and the truth model at the data points upon which the surrogate is built). For example, sum_squared
refers to the sum of the squared residuals, mean_abs
refers to the mean of the absolute value of the residuals, and max_scaled
refers to the maximum scaled value of the residual, where the scaled value is taken by dividing the residual by the true function value at that point. In addition, press
refers to a leave-one-out cross validation metric, and cv
refers to a general cross validation metric. rsquared
refers to the R-squared value typically used in regression analysis (the proportion of the variability in the response that can be accounted for by the surrogate model).
The correction
specification specifies that the approximation will be corrected to match truth data, either matching truth values in the case of zeroth_order
matching, matching truth values and gradients in the case of first_order
matching, or matching truth values, gradients, and Hessians in the case of second_order
matching. For additive
and multiplicative
corrections, the correction is local in that the truth data is matched at a single point, typically the center of the approximation region. The additive
correction adds a scalar offset (zeroth_order
), a linear function (first_order
), or a quadratic function (second_order
) to the approximation to match the truth data at the point, and the multiplicative
correction multiplies the approximation by a scalar (zeroth_order
), a linear function (first_order
), or a quadratic function (second_order
) to match the truth data at the point. The additive
first_order
case is due to [Lewis and Nash, 2000] and the multiplicative
first_order
case is commonly known as beta correction [Haftka, 1991]. For the combined
correction, the use of both additive and multiplicative corrections allows the satisfaction of an additional matching condition, typically the truth function values at the previous correction point (e.g., the center of the previous trust region). The combined
correction is then a multipoint correction, as opposed to the local additive
and multiplicative
corrections. Each of these correction capabilities is described in detail in [Eldred et al., 2004a].
Finally, the use_gradients
flag specifies a future capability for the use of gradient data in the global approximation builds. This capability is currently supported in SurrBasedLocalMinimizer, SurrogateDataPoint, and Approximation::build(), but is not yet supported in any global approximation derived class redefinitions of Approximation::find_coefficients(). Tables 6.4 and 6.5 summarizes the global approximation specifications.
Description | Keyword | Associated Data | Status | Default | |
Global approximations | global | none | Required group (1 of 4 selections) | N/A | |
Artificial neural network | neural_network | none | Required (1 of 7 selections) | N/A | |
ANN number nodes | nodes | integer | Optional | ||
ANN range | range | real | Optional | ||
ANN random weight | random_weight | integer | Optional | ||
Gaussian process | gaussian_process | none | Required (1 of 7 selections) | N/A | |
GP point selection | point_selection | none | Optional | no point selection | |
GP trend function | trend | constant | linear | reduced_quadratic | Optional | reduced_quadratic trend | |
Kriging interpolation | kriging | none | Required group (1 of 7 selections) | N/A | |
Kriging correlation lengths | correlation_lengths | list of reals | Optional | internally computed correlation_lengths | |
Kriging optimization method | optimization_method | 'global' | 'local' | 'sampling' | 'none' | Optional | global | |
Kriging maximum trials | max_trials | integer | Optional | ||
Kriging trend function | trend | constant | linear | reduced_quadratic | quadratic | Optional | reduced_quadratic trend | |
Multivariate adaptive regression splines | mars | none | Required (1 of 7 selections) | N/A | |
MARS maximum bases | max_bases | integer | Optional | ||
MARS interpolation | interpolation | linear | cubic | Optional | ||
Moving least squares | moving_least_squares | none | Required (1 of 7 selections) | N/A | |
MLS polynomial order | poly_order | integer | Optional | ||
MLS weight function | weight_function | integer | Optional |
| |
Polynomial | polynomial | linear | quadratic | cubic | Required group (1 of 7 selections) | N/A | |
Radial basis functions | radial_basis_functions | none | Required group (1 of 7 selections) | N/A | |
RBF number of bases | bases | integer | Optional | ||
RBF maximum points | max_pts | integer | Optional | ||
RBF minimum partitions | min_partition | integer | Optional | ||
RBF maximum subsets | bases | integer | Optional |
Description | Keyword | Associated Data | Status | Default |
Design of experiments method pointer | dace_method_pointer | string | Optional | no design of experiments data |
Sample reuse in global approximation | reuse_samples | all | region | none | Optional group | all if samples_file defined, none otherwise |
File import of samples for global approximation builds | samples_file | string | Optional | no sample import from a file |
Surrogate correction approach | correction | additive or multiplicative or combined , zeroth_order or first_order or second_order | Optional group | no surrogate correction |
Use of gradient data in global approximation builds | use_gradients | none | Optional | gradient data not used in global approximation builds |
Print diagnostic metrics about the surrogate goodness of fit | diagnostics | string list (as many as desired): sum_squared , mean_squared , root_mean_squared , max_squared , sum_scaled , max_scaled , sum_abs , mean_abs , max_abs , press , cv , and rsquared | Optional | No diagnostics printed |
actual_model_pointer
specification. Table 6.6 summarizes the multipoint approximation specifications.Description | Keyword | Associated Data | Status | Default |
Multipoint approximation | multipoint | none | Required group (1 of 4 selections) | N/A |
Two-point adaptive nonlinear approximation | tana | none | Required | N/A |
Pointer to the truth model specification | actual_model_pointer | string | Required | N/A |
taylor_series
selection. The order of the Taylor series may be either first-order or second-order, which is automatically determined from the gradient and Hessian specifications in the responses specification (see Gradient Specification and Hessian Specification) for the truth model.
The truth model to be used to generate the value/gradient/Hessian data used in the series expansion is identified through the required actual_model_pointer
specification. The use of a model pointer (as opposed to an interface pointer) allows additional flexibility in defining the approximation. In particular, the derivative specification for the truth model may differ from the derivative specification for the approximation , and the truth model results being approximated may involve a model recursion (e.g., the values/gradients from a nested model). Table 6.7 summarizes the local approximation interface specifications.
Description | Keyword | Associated Data | Status | Default |
Local approximation | local | none | Required group (1 of 4 selections) | N/A |
Taylor series local approximation | taylor_series | none | Required | N/A |
Pointer to the truth model specification | actual_model_pointer | string | Required | N/A |
low_fidelity_model_pointer
specification points to the low fidelity model specification. This model is used to generate low fidelity responses which are then corrected and returned to an iterator. The required high_fidelity_model_pointer
specification points to the specification for the high fidelity truth model. This model is used only for verifying low fidelity results and updating low fidelity corrections. The correction
specification specifies which correction technique will be applied to the low fidelity results in order to match the high fidelity results at one or more points. In the hierarchical case (as compared to the global case), the correction
specification is required, since the omission of a correction technique would effectively eliminate the purpose of the high fidelity model. If it is desired to use a low fidelity model without corrections, then a hierarchical approximation is not needed and a single
model should be used. Refer to Global approximations for additional information on available correction approaches. Table 6.8 summarizes the hierarchical approximation specifications.Description | Keyword | Associated Data | Status | Default |
Hierarchical approximation | hierarchical | none | Required group (1 of 4 selections) | N/A |
Pointer to the low fidelity model specification | low_fidelity_model_pointer | string | Required | N/A |
Pointer to the high fidelity model specification | high_fidelity_model_pointer | string | Required | N/A |
Surrogate correction approach | correction | additive or multiplicative or combined , zeroth_order or first_order or second_order | Required group | N/A |
nested
model case, a sub_method_pointer
must be provided in order to specify the nested iterator, and optional_interface_pointer
and optional_interface_responses_pointer
provide an optional group specification for the optional interface portion of nested models (where optional_interface_pointer
points to the interface specification and optional_interface_responses_pointer
points to a responses specification describing the data to be returned by this interface). This interface is used to provide non-nested data, which is then combined with data from the nested iterator using the primary_response_mapping
and secondary_response_mapping
inputs (see mapping discussion below).Table 6.9 provides the specification detail for nested model pointers.
Description | Keyword | Associated Data | Status | Default |
Optional interface set pointer | optional_interface_pointer | string | Optional group | no optional interface |
Responses pointer for nested model optional interfaces | optional_interface_responses_pointer | string | Optional | reuse of top-level responses specification |
Sub-method pointer for nested models | sub_method_pointer | string | Required | N/A |
Nested models may employ mappings for both the variable inputs to the sub-model and the response outputs from the sub-model. In the former case, the primary_variable_mapping
and secondary_variable_mapping
specifications are used to map from the active top-level variables into the sub-model variables, and in the latter case, the primary_response_mapping
and secondary_response_mapping
specifications are used to compute the sub-model response contributions to the top-level responses. For the variable mappings, the primary and secondary specifications provide lists of strings which are used to target specific sub-model variables and their sub-parameters, respectively. The primary strings are matched to continuous or discrete variable labels such as 'cdv_1'
(either user-supplied or default labels), and the secondary strings are matched to either real or integer random variable distribution parameters such as 'mean'
or 'num_trials'
(the form of the uncertain distribution parameter keyword that is appropriate for a single variable instance) or continuous or discrete design/state variable sub-parameters such as 'lower_bound'
or 'upper_bound'
(again, keyword form appropriate for a single variable instance). No coersion of types is supported, so real-valued top-level variables should map to either real-valued sub-model variables or real-valued sub-parameters and integer-valued top-level variables should map to either integer-valued sub-model variables or integer-valued sub-parameters. As long as these real versus integer constraints are satisfied, mappings are free to cross variable types (design, aleatory uncertain, epistemic uncertain, state) and domain types (continuous, discrete). Both primary_variable_mapping
and secondary_variable_mapping
specifications are optional, which is designed to support the following three possibilities:
'continuous_design'
variables which are active at the top level). Multiple sub-model variable types may be updated in this manner, provided that they are all active in the top-level variables. Since there is a direct variable correspondence for these default insertions, sub-model bounds and labels are also updated from the top-level bounds and labels in order to eliminate the need for redundant input file specifications. Thus, it is typical for the sub-model variables specification to only contain the minimal required information, such as the number of variables, for these insertion targets. The sub-model must allocate enough space for each of the types that will accept default insertions, and the leading set of matching sub-model variables are updated (i.e., the sub-model may allocate more than needed and the trailing set will be unmodified).
These different variable mapping possibilities may be used in any combination by employing empty strings (''
) for particular omitted mappings (the number of strings in user-supplied primary and secondary variable mapping specifications must equal the total number of active top-level variables, including both continuous and discrete types). The ordering of the active variables is the same as shown in dakota.input.summary and as presented in Variables Commands.
If inactive variables are present at the outer level, then the default type 3 mapping is used for these variables; that is, outer loop inactive variables are inserted into inner loop variables (active or inactive) based on matching of variable types, top-level bounds and labels are also propagated, the inner loop must allocate sufficient space to receive the outer loop values, and the leading subset within this inner loop allocation is updated. This capability is important for allowing nesting beyond two levels, since an active variable at the outer-most loop may become inactive at the next lower level, but still need to be further propagated down the recursion.
For the response mappings, the primary and secondary specifications provide real-valued multipliers to be applied to sub-iterator response results. The sub-iterator response results are defined as follows for different sub-iterator types:
response_levels
, probability_levels
, reliability_levels
, and/or gen_reliability_levels
, in that order.response_levels
, probability_levels
, reliability_levels
, and/or gen_reliability_levels
, in that order.The primary values map sub-iterator response results into top-level objective functions, least squares terms, or generic response functions, depending on the declared top-level response set. The secondary values map sub-iterator response results into top-level nonlinear inequality and equality constraints. Refer to NestedModel::response_mapping() for additional details.
An example of variable and response mappings is provided below:
primary_variable_mapping = '' '' 'X' 'Y' secondary_variable_mapping = '' '' 'mean' 'mean' primary_response_mapping = 1. 0. 0. 0. 0. 0. 0. 0. 0. secondary_response_mapping = 0. 0. 0. 1. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 3. 0.
'X'
and 'Y'
(option 1 above). The response mappings correspond to 9 sub-iterator response functions (e.g., a set of UQ final statistics for 3 response functions, each with a mean, a standard deviation, and a level mapping). The primary response mapping maps the first sub-iterator response function (mean) into a single objective function, least squares term, or generic response function (as dictated by the top-level response specification), and the secondary response mapping maps the fourth sub-iterator response function plus 3 times the fifth sub-iterator response function (mean plus 3 standard deviations) into one top-level nonlinear constraint and the seventh sub-iterator response function plus 3 times the eighth sub-iterator response function (mean plus 3 standard deviations) into another top-level nonlinear constraint (these top-level nonlinear constraints may be inequality or equality, as dictated by the top-level response specification).Table 6.10 provides the specification detail for the model independent controls involving nested model mappings.
Description | Keyword | Associated Data | Status | Default |
Primary variable mappings for nested models | primary_variable_mapping | list of strings | Optional | default variable insertions based on variable type |
Secondary variable mappings for nested models | secondary_variable_mapping | list of strings | Optional | primary mappings into sub-model variables are value-based |
Primary response mappings for nested models | primary_response_mapping | list of reals | Optional | no sub-iterator contribution to primary functions |
Secondary response mappings for nested models | secondary_response_mapping | list of reals | Optional | no sub-iterator contribution to secondary functions |