Base class for the approximation class hierarchy. More...
Public Member Functions | |
Approximation () | |
default constructor | |
Approximation (ProblemDescDB &problem_db, size_t num_vars) | |
standard constructor for envelope | |
Approximation (const String &approx_type, const UShortArray &approx_order, size_t num_vars, unsigned short data_order) | |
alternate constructor | |
Approximation (const Approximation &approx) | |
copy constructor | |
virtual | ~Approximation () |
destructor | |
Approximation | operator= (const Approximation &approx) |
assignment operator | |
virtual void | build () |
builds the approximation from scratch | |
virtual void | rebuild () |
rebuilds the approximation incrementally | |
virtual void | pop (bool save_sdp_set) |
removes entries from end of currentPoints (last points appended) | |
virtual size_t | pop_count () |
returns number of entries to pop from end of currentPoints, based on size of last data set appended | |
virtual void | restore () |
restores state prior to previous append() | |
virtual bool | restore_available () |
queries availability of restoration for trial set | |
virtual size_t | restoration_index () |
return index of trial set within restorable bookkeeping sets | |
virtual void | finalize () |
finalize approximation by applying all remaining trial sets | |
virtual size_t | finalization_index (size_t i) |
return index of i-th trailing trial set within restorable bookkeeping sets | |
virtual const Real & | get_value (const RealVector &x) |
retrieve the approximate function value for a given parameter vector | |
virtual const RealVector & | get_gradient (const RealVector &x) |
retrieve the approximate function gradient for a given parameter vector | |
virtual const RealSymMatrix & | get_hessian (const RealVector &x) |
retrieve the approximate function Hessian for a given parameter vector | |
virtual const Real & | get_prediction_variance (const RealVector &x) |
retrieve the variance of the predicted value for a given parameter vector | |
virtual const Real & | get_diagnostic (const String &metric_type) |
retrieve the diagnostic metric for the diagnostic type specified | |
virtual const RealVector & | approximation_coefficients () const |
return the coefficient array computed by build()/rebuild() | |
virtual void | approximation_coefficients (const RealVector &approx_coeffs) |
set the coefficient array from external sources, rather than computing with build()/rebuild() | |
virtual void | print_coefficients (std::ostream &s) const |
print the coefficient array computed in build()/rebuild() | |
virtual int | min_coefficients () const |
return the minimum number of samples (unknowns) required to build the derived class approximation type in numVars dimensions | |
virtual int | recommended_coefficients () const |
return the recommended number of samples (unknowns) required to build the derived class approximation type in numVars dimensions | |
virtual int | num_constraints () const |
return the number of constraints to be enforced via anchorPoint | |
virtual void | clear_current () |
clear current build data in preparation for next build | |
virtual const bool | diagnostics_available () |
check if diagnostics are available for this approximation type | |
int | min_points (bool constraint_flag) const |
return the minimum number of points required to build the approximation type in numVars dimensions. Uses *_coefficients() and num_constraints(). | |
int | recommended_points (bool constraint_flag) const |
return the recommended number of samples to build the approximation type in numVars dimensions (default same as min_points) | |
int | num_variables () const |
return the number of variables used in the approximation | |
const SDPList & | current_points () const |
return currentPoints | |
const Pecos::SurrogateDataPoint & | anchor_point () const |
return anchorPoint | |
void | update (const Variables &vars, const Response &response, int fn_index) |
populates/replaces anchorPoint | |
void | update (const RealVector &c_vars, const Real &fn_val, const RealVector &fn_grad, const RealSymMatrix &fn_hess) |
populates/replaces anchorPoint | |
void | update (const RealMatrix &samples, const ResponseArray &resp_array, int fn_index) |
populates/replaces currentPoints | |
void | update (const VariablesArray &vars_array, const ResponseArray &resp_array, int fn_index) |
populates/replaces currentPoints | |
void | append (const Variables &vars, const Response &response, int fn_index) |
appends one additional entry to currentPoints | |
void | append (const RealVector &c_vars, const Real &fn_val, const RealVector &fn_grad, const RealSymMatrix &fn_hess) |
appends one additional entry to currentPoints | |
void | append (const RealMatrix &samples, const ResponseArray &resp_array, int fn_index) |
appends multiple additional entries to currentPoints | |
void | append (const VariablesArray &vars_array, const ResponseArray &resp_array, int fn_index) |
appends multiple additional entries to currentPoints | |
bool | anchor () const |
queries the status of anchorPoint | |
void | clear_all () |
clear all build data (current and history) to restore original state | |
void | set_bounds (const RealVector &lower, const RealVector &upper) |
set approximation lower and upper bounds (currently only used by graphics) | |
Approximation * | approx_rep () const |
returns approxRep for access to derived class member functions that are not mapped to the top Approximation level | |
Protected Member Functions | |
Approximation (BaseConstructor, const ProblemDescDB &problem_db, size_t num_vars) | |
constructor initializes the base class part of letter classes (BaseConstructor overloading avoids infinite recursion in the derived class constructors - Coplien, p. 139) | |
Protected Attributes | |
short | outputLevel |
output verbosity level: {SILENT,QUIET,NORMAL,VERBOSE,DEBUG}_OUTPUT | |
int | numVars |
number of variables in the approximation | |
String | approxType |
approximation type identifier | |
unsigned short | dataOrder |
order of the data used for surrogate construction, in ActiveSet request vector 3-bit format. | |
Real | approxValue |
value of the approximation returned by get_value() | |
RealVector | approxGradient |
gradient of the approximation returned by get_gradient() | |
RealSymMatrix | approxHessian |
Hessian of the approximation returned by get_hessian() | |
Real | approxVariance |
value of the approximation returned by get_prediction_variance() | |
Real | approxDiagnostic |
value of the diagnostic returned by get_diagnostic() | |
SDPList | currentPoints |
list of samples used to build the approximation. These sample points are fit approximately (e.g., using least squares regression). | |
Pecos::SurrogateDataPoint | anchorPoint |
a special sample (often at the center of the approximation region) for which exact matching is enforced (e.g., using equality-constrained least squares regression). | |
RealVector | approxLowerBounds |
approximation lower bounds (used by 3D graphics and Surfpack KrigingModel) | |
RealVector | approxUpperBounds |
approximation upper bounds (used by 3D graphics and Surfpack KrigingModel) | |
Private Member Functions | |
Approximation * | get_approx (ProblemDescDB &problem_db, size_t num_vars) |
Used only by the standard envelope constructor to initialize approxRep to the appropriate derived type. | |
Approximation * | get_approx (const String &approx_type, const UShortArray &approx_order, size_t num_vars, unsigned short data_order) |
Used only by the alternate envelope constructor to initialize approxRep to the appropriate derived type. | |
void | add (const Variables &vars, const Response &response, int fn_index, bool anchor_flag) |
extract the relevant RealVector from Variables and invoke add(RealVector&) | |
void | add (const Real *sample_c_vars, const Response &response, int fn_index, bool anchor_flag) |
create a RealVector view and invoke add(RealVector&) | |
void | add (const RealVector &sample_c_vars, const Response &response, int fn_index, bool anchor_flag) |
shared code among add(Variables&) and add(Real*); adds a new data point by either appending to currentPoints or assigning to anchorPoint, as dictated by anchor_flag. Uses add_point() and add_anchor(). | |
void | add_point (const RealVector &x, const Real &fn_val, const RealVector &fn_grad, const RealSymMatrix &fn_hess) |
add a new data point by appending to currentPoints | |
void | add_anchor (const RealVector &x, const Real &fn_val, const RealVector &fn_grad, const RealSymMatrix &fn_hess) |
add a new data point by assigning to anchorPoint | |
Private Attributes | |
SDP2DArray | savedSDPSets |
bookkeeping for saving data popped from currentPoints (in pop()) that is later restored (in restore() and finalize()) | |
size_t | popCount |
number of points previously added by append() to be removed by pop() | |
Approximation * | approxRep |
pointer to the letter (initialized only for the envelope) | |
int | referenceCount |
number of objects sharing approxRep |
Base class for the approximation class hierarchy.
The Approximation class is the base class for the response data fit approximation class hierarchy in DAKOTA. One instance of an Approximation must be created for each function to be approximated (a vector of Approximations is contained in ApproximationInterface). For memory efficiency and enhanced polymorphism, the approximation hierarchy employs the "letter/envelope idiom" (see Coplien "Advanced C++", p. 133), for which the base class (Approximation) serves as the envelope and one of the derived classes (selected in Approximation::get_approx()) serves as the letter.
Approximation | ( | ) |
default constructor
The default constructor is used in Array<Approximation> instantiations and by the alternate envelope constructor. approxRep is NULL in this case (problem_db is needed to build a meaningful Approximation object). This makes it necessary to check for NULL in the copy constructor, assignment operator, and destructor.
Approximation | ( | ProblemDescDB & | problem_db, |
size_t | num_vars | ||
) |
standard constructor for envelope
Envelope constructor only needs to extract enough data to properly execute get_approx, since Approximation(BaseConstructor, problem_db) builds the actual base class data for the derived approximations.
References Dakota::abort_handler(), Approximation::approxRep, and Approximation::get_approx().
Approximation | ( | const String & | approx_type, |
const UShortArray & | approx_order, | ||
size_t | num_vars, | ||
unsigned short | data_order | ||
) |
alternate constructor
This is the alternate envelope constructor for instantiations on the fly. Since it does not have access to problem_db, the letter class is not fully populated. This constructor executes get_approx(type), which invokes the default constructor of the derived letter class, which in turn invokes the default constructor of the base class.
References Dakota::abort_handler(), Approximation::approxRep, and Approximation::get_approx().
Approximation | ( | const Approximation & | approx | ) |
copy constructor
Copy constructor manages sharing of approxRep and incrementing of referenceCount.
References Approximation::approxRep, and Approximation::referenceCount.
~Approximation | ( | ) | [virtual] |
destructor
Destructor decrements referenceCount and only deletes approxRep when referenceCount reaches zero.
References Approximation::approxRep, and Approximation::referenceCount.
Approximation | ( | BaseConstructor | , |
const ProblemDescDB & | problem_db, | ||
size_t | num_vars | ||
) | [protected] |
constructor initializes the base class part of letter classes (BaseConstructor overloading avoids infinite recursion in the derived class constructors - Coplien, p. 139)
This constructor is the one which must build the base class data for all derived classes. get_approx() instantiates a derived class letter and the derived constructor selects this base class constructor in its initialization list (to avoid recursion in the base class constructor calling get_approx() again). Since the letter IS the representation, its rep pointer is set to NULL (an uninitialized pointer causes problems in ~Approximation).
References Approximation::approxType, and ProblemDescDB::get_bool().
Approximation operator= | ( | const Approximation & | approx | ) |
assignment operator
Assignment operator decrements referenceCount for old approxRep, assigns new approxRep, and increments referenceCount for new approxRep.
References Approximation::approxRep, and Approximation::referenceCount.
void clear_current | ( | ) | [inline, virtual] |
clear current build data in preparation for next build
Redefined by TANA3Approximation to clear current data but preserve history.
Reimplemented in TANA3Approximation.
References Approximation::approxRep, Approximation::clear_all(), and Approximation::clear_current().
Referenced by Approximation::clear_current().
void clear_all | ( | ) | [inline] |
clear all build data (current and history) to restore original state
Clears out any history (e.g., TANA3Approximation use for a different response function in NonDReliability).
References Approximation::anchorPoint, Approximation::approxRep, Approximation::clear_all(), and Approximation::currentPoints.
Referenced by Approximation::clear_all(), and Approximation::clear_current().
Approximation * get_approx | ( | ProblemDescDB & | problem_db, |
size_t | num_vars | ||
) | [private] |
Used only by the standard envelope constructor to initialize approxRep to the appropriate derived type.
Used only by the envelope constructor to initialize approxRep to the appropriate derived type.
References ProblemDescDB::get_string().
Referenced by Approximation::Approximation().
Approximation * get_approx | ( | const String & | approx_type, |
const UShortArray & | approx_order, | ||
size_t | num_vars, | ||
unsigned short | data_order | ||
) | [private] |
Used only by the alternate envelope constructor to initialize approxRep to the appropriate derived type.
Used only by the envelope constructor to initialize approxRep to the appropriate derived type.
unsigned short dataOrder [protected] |
order of the data used for surrogate construction, in ActiveSet request vector 3-bit format.
This setting should not be inferred from the responses specification, since we may need gradient support for evaluating gradients at a single point (e.g., the center of a trust region), but not require gradient evaluations at every point.
Referenced by TaylorApproximation::build(), TANA3Approximation::build(), GaussProcApproximation::GaussProcApproximation(), TaylorApproximation::get_gradient(), TaylorApproximation::get_hessian(), TaylorApproximation::get_value(), TaylorApproximation::min_coefficients(), Approximation::min_points(), PecosApproximation::PecosApproximation(), Approximation::recommended_points(), SurfpackApproximation::SurfpackApproximation(), TANA3Approximation::TANA3Approximation(), and TaylorApproximation::TaylorApproximation().