Class for provably-convergent local surrogate-based optimization and nonlinear least squares. More...
Public Member Functions | |
SurrBasedLocalMinimizer (Model &model) | |
constructor | |
~SurrBasedLocalMinimizer () | |
destructor | |
Protected Member Functions | |
void | reset () |
reset convergence controls in case of multiple SBLM executions | |
Private Member Functions | |
void | minimize_surrogates () |
Performs local surrogate-based minimization by minimizing local, global, or hierarchical surrogates over a series of trust regions. | |
bool | tr_bounds (const RealVector &global_lower_bnds, const RealVector &global_upper_bnds, RealVector &tr_lower_bnds, RealVector &tr_upper_bnds) |
compute current trust region bounds | |
void | find_center_truth (const Iterator &dace_iterator, Model &truth_model) |
retrieve responseCenterTruth if possible, evaluate it if not | |
void | find_center_approx () |
retrieve responseCenter_approx if possible, evaluate it if not | |
void | hard_convergence_check (const Response &response_truth, const RealVector &c_vars, const RealVector &lower_bnds, const RealVector &upper_bnds) |
check for hard convergence (norm of projected gradient of merit function near zero) | |
void | tr_ratio_check (const RealVector &c_vars_star, const RealVector &tr_lower_bounds, const RealVector &tr_upper_bounds) |
compute trust region ratio (for SBLM iterate acceptance and trust region resizing) and check for soft convergence (diminishing returns) | |
void | update_penalty (const RealVector &fns_center_truth, const RealVector &fns_star_truth) |
initialize and update the penaltyParameter | |
void | relax_constraints (const RealVector &lower_bnds, const RealVector &upper_bnds) |
relax constraints by updating bounds when current iterate is infeasible | |
Static Private Member Functions | |
static void | approx_subprob_objective_eval (const Variables &surrogate_vars, const Variables &recast_vars, const Response &surrogate_response, Response &recast_response) |
static function used to define the approximate subproblem objective. | |
static void | approx_subprob_constraint_eval (const Variables &surrogate_vars, const Variables &recast_vars, const Response &surrogate_response, Response &recast_response) |
static function used to define the approximate subproblem constraints. | |
static void | hom_objective_eval (int &mode, int &n, double *tau_and_x, double &f, double *grad_f, int &) |
static function used by NPSOL as the objective function in the homotopy constraint relaxation formulation. | |
static void | hom_constraint_eval (int &mode, int &ncnln, int &n, int &nrowj, int *needc, double *tau_and_x, double *c, double *cjac, int &nstate) |
static function used by NPSOL as the constraint function in the homotopy constraint relaxation formulation. | |
Private Attributes | |
Real | origTrustRegionFactor |
original user specification for trustRegionFactor | |
Real | trustRegionFactor |
the trust region factor is used to compute the total size of the trust region -- it is a percentage, e.g. for trustRegionFactor = 0.1, the actual size of the trust region will be 10% of the global bounds (upper bound - lower bound for each design variable). | |
Real | minTrustRegionFactor |
a soft convergence control: stop SBLM when the trust region factor is reduced below the value of minTrustRegionFactor | |
Real | trRatioContractValue |
trust region ratio min value: contract tr if ratio below this value | |
Real | trRatioExpandValue |
trust region ratio sufficient value: expand tr if ratio above this value | |
Real | gammaContract |
trust region contraction factor | |
Real | gammaExpand |
trust region expansion factor | |
short | approxSubProbObj |
type of approximate subproblem objective: ORIGINAL_OBJ, LAGRANGIAN_OBJ, or AUGMENTED_LAGRANGIAN_OBJ | |
short | approxSubProbCon |
type of approximate subproblem constraints: NO_CON, LINEARIZED_CON, or ORIGINAL_CON | |
Model | approxSubProbModel |
the approximate sub-problem formulation solved on each approximate minimization cycle: may be a shallow copy of iteratedModel, or may involve a RecastModel recursion applied to iteratedModel | |
bool | recastSubProb |
flag to indicate when approxSubProbModel involves a RecastModel recursion | |
short | trConstraintRelax |
type of trust region constraint relaxation for infeasible starting points: NO_RELAX or HOMOTOPY | |
short | meritFnType |
type of merit function used in trust region ratio logic: PENALTY_MERIT, ADAPTIVE_PENALTY_MERIT, LAGRANGIAN_MERIT, or AUGMENTED_LAGRANGIAN_MERIT | |
short | acceptLogic |
type of iterate acceptance test logic: FILTER or TR_RATIO | |
int | penaltyIterOffset |
iteration offset used to update the scaling of the penalty parameter for adaptive_penalty merit functions | |
short | convergenceFlag |
code indicating satisfaction of hard or soft convergence conditions | |
short | softConvCount |
number of consecutive candidate point rejections. If the count reaches softConvLimit, stop SBLM. | |
short | softConvLimit |
the limit on consecutive candidate point rejections. If exceeded by softConvCount, stop SBLM. | |
bool | truthGradientFlag |
flags the use/availability of truth gradients within the SBLM process | |
bool | approxGradientFlag |
flags the use/availability of surrogate gradients within the SBLM process | |
bool | truthHessianFlag |
flags the use/availability of truth Hessians within the SBLM process | |
bool | approxHessianFlag |
flags the use/availability of surrogate Hessians within the SBLM process | |
short | correctionType |
flags the use of surrogate correction techniques at the center of each trust region | |
bool | globalApproxFlag |
flags the use of a global data fit surrogate (rsm, ann, mars, kriging) | |
bool | multiptApproxFlag |
flags the use of a multipoint data fit surrogate (TANA) | |
bool | localApproxFlag |
flags the use of a local data fit surrogate (Taylor series) | |
bool | hierarchApproxFlag |
flags the use of a model hierarchy/multifidelity surrogate | |
bool | newCenterFlag |
flags the acceptance of a candidate point and the existence of a new trust region center | |
bool | daceCenterPtFlag |
flags the availability of the center point in the DACE evaluations for global approximations (CCD, Box-Behnken) | |
bool | multiLayerBypassFlag |
flags the simultaneous presence of two conditions: (1) additional layerings w/i actual_model (e.g., surrogateModel = layered/nested/layered | |
bool | useDerivsFlag |
flag for the "use_derivatives" specification for which derivatives are to be evaluated at each DACE point in global surrogate builds. | |
RealVector | nonlinIneqLowerBndsSlack |
individual violations of nonlinear inequality constraint lower bounds | |
RealVector | nonlinIneqUpperBndsSlack |
individual violations of nonlinear inequality constraint upper bounds | |
RealVector | nonlinEqTargetsSlack |
individual violations of nonlinear equality constraint targets | |
Real | tau |
constraint relaxation parameter | |
Real | alpha |
constraint relaxation parameter backoff parameter (multiplier) | |
Variables | varsCenter |
variables at the trust region center | |
Response | responseCenterApprox |
approx response at trust region center | |
Response | responseStarApprox |
approx response at SBLM cycle minimum | |
IntResponsePair | responseCenterTruth |
truth response at trust region center | |
IntResponsePair | responseStarTruth |
truth response at SBLM cycle minimum | |
Static Private Attributes | |
static SurrBasedLocalMinimizer * | sblmInstance |
pointer to SBLM instance used in static member functions |
Class for provably-convergent local surrogate-based optimization and nonlinear least squares.
This minimizer uses a SurrogateModel to perform minimization based on local, global, or hierarchical surrogates. It achieves provable convergence through the use of a sequence of trust regions and the application of surrogate corrections at the trust region centers.
void minimize_surrogates | ( | ) | [private, virtual] |
Performs local surrogate-based minimization by minimizing local, global, or hierarchical surrogates over a series of trust regions.
Trust region-based strategy to perform surrogate-based optimization in subregions (trust regions) of the parameter space. The minimizer operates on approximations in lieu of the more expensive simulation-based response functions. The size of the trust region is varied according to the goodness of the agreement between the approximations and the true response functions.
Implements SurrBasedMinimizer.
References Dakota::abort_handler(), Iterator::active_set(), Response::active_set(), Model::active_variables(), Graphics::add_datapoint(), DiscrepancyCorrection::apply(), SurrBasedLocalMinimizer::approxGradientFlag, SurrBasedLocalMinimizer::approxHessianFlag, SurrBasedMinimizer::approxSubProbMinimizer, SurrBasedLocalMinimizer::approxSubProbModel, Iterator::bestResponseArray, Iterator::bestVariablesArray, Model::build_approximation(), Model::component_parallel_mode(), DiscrepancyCorrection::compute(), Model::compute_response(), Model::continuous_lower_bounds(), Model::continuous_upper_bounds(), Variables::continuous_variables(), Model::continuous_variables(), SurrBasedLocalMinimizer::convergenceFlag, Variables::copy(), Dakota::copy_data(), SurrBasedLocalMinimizer::correctionType, Model::current_response(), Model::current_variables(), SurrBasedLocalMinimizer::daceCenterPtFlag, Dakota::dakota_graphics, Model::discrepancy_correction(), Model::evaluation_id(), SurrBasedLocalMinimizer::find_center_approx(), SurrBasedLocalMinimizer::find_center_truth(), SurrBasedLocalMinimizer::globalApproxFlag, SurrBasedLocalMinimizer::hard_convergence_check(), Iterator::is_null(), Iterator::iteratedModel, SurrBasedLocalMinimizer::localApproxFlag, Iterator::maxIterations, SurrBasedLocalMinimizer::minTrustRegionFactor, SurrBasedLocalMinimizer::multiLayerBypassFlag, SurrBasedLocalMinimizer::multiptApproxFlag, SurrBasedLocalMinimizer::newCenterFlag, Model::nonlinear_eq_constraint_targets(), Model::nonlinear_ineq_constraint_lower_bounds(), Model::nonlinear_ineq_constraint_upper_bounds(), Iterator::numContinuousVars, SurrBasedMinimizer::origNonlinEqTargets, SurrBasedMinimizer::origNonlinIneqLowerBnds, SurrBasedMinimizer::origNonlinIneqUpperBnds, SurrBasedLocalMinimizer::recastSubProb, SurrBasedLocalMinimizer::relax_constraints(), ActiveSet::request_values(), SurrBasedLocalMinimizer::reset(), Iterator::response_results(), SurrBasedLocalMinimizer::responseCenterApprox, SurrBasedLocalMinimizer::responseCenterTruth, SurrBasedLocalMinimizer::responseStarApprox, SurrBasedLocalMinimizer::responseStarTruth, Iterator::run_iterator(), Iterator::sampling_scheme(), SurrBasedMinimizer::sbIterNum, SurrBasedLocalMinimizer::sblmInstance, SurrBasedLocalMinimizer::softConvCount, SurrBasedLocalMinimizer::softConvLimit, Model::subordinate_iterator(), Model::surrogate_model(), Model::surrogate_response_mode(), SurrBasedLocalMinimizer::tr_bounds(), SurrBasedLocalMinimizer::tr_ratio_check(), SurrBasedLocalMinimizer::trConstraintRelax, SurrBasedLocalMinimizer::trustRegionFactor, Model::truth_model(), SurrBasedLocalMinimizer::truthGradientFlag, SurrBasedLocalMinimizer::truthHessianFlag, Response::update(), SurrBasedLocalMinimizer::useDerivsFlag, Iterator::variables_results(), and SurrBasedLocalMinimizer::varsCenter.
void hard_convergence_check | ( | const Response & | response_truth, |
const RealVector & | c_vars, | ||
const RealVector & | lower_bnds, | ||
const RealVector & | upper_bnds | ||
) | [private] |
check for hard convergence (norm of projected gradient of merit function near zero)
The hard convergence check computes the gradient of the merit function at the trust region center, performs a projection for active bound constraints (removing any gradient component directed into an active bound), and signals convergence if the 2-norm of this projected gradient is less than convergenceTol.
References SurrBasedLocalMinimizer::acceptLogic, SurrBasedLocalMinimizer::approxSubProbObj, SurrBasedMinimizer::constraint_violation(), Minimizer::constraintTol, SurrBasedLocalMinimizer::convergenceFlag, Iterator::convergenceTol, Response::function_gradients(), Response::function_values(), Iterator::iteratedModel, SurrBasedMinimizer::lagrangian_gradient(), SurrBasedLocalMinimizer::meritFnType, Iterator::numContinuousVars, Minimizer::numNonlinearConstraints, SurrBasedMinimizer::origNonlinEqTargets, SurrBasedMinimizer::origNonlinIneqLowerBnds, SurrBasedMinimizer::origNonlinIneqUpperBnds, Model::primary_response_fn_weights(), SurrBasedMinimizer::sbIterNum, SurrBasedLocalMinimizer::truthGradientFlag, SurrBasedMinimizer::update_augmented_lagrange_multipliers(), SurrBasedMinimizer::update_filter(), and SurrBasedMinimizer::update_lagrange_multipliers().
Referenced by SurrBasedLocalMinimizer::minimize_surrogates().
void tr_ratio_check | ( | const RealVector & | c_vars_star, |
const RealVector & | tr_lower_bnds, | ||
const RealVector & | tr_upper_bnds | ||
) | [private] |
compute trust region ratio (for SBLM iterate acceptance and trust region resizing) and check for soft convergence (diminishing returns)
Assess acceptance of SBLM iterate (trust region ratio or filter) and compute soft convergence metrics (number of consecutive failures, min trust region size, etc.) to assess whether the convergence rate has decreased to a point where the process should be terminated (diminishing returns).
References SurrBasedLocalMinimizer::acceptLogic, SurrBasedLocalMinimizer::approxSubProbObj, SurrBasedMinimizer::augmented_lagrangian_merit(), SurrBasedMinimizer::constraint_violation(), Minimizer::constraintTol, Iterator::convergenceTol, SurrBasedMinimizer::etaSequence, Response::function_values(), SurrBasedLocalMinimizer::gammaContract, SurrBasedLocalMinimizer::gammaExpand, SurrBasedLocalMinimizer::globalApproxFlag, Iterator::iteratedModel, SurrBasedMinimizer::lagrangian_merit(), SurrBasedLocalMinimizer::meritFnType, SurrBasedLocalMinimizer::newCenterFlag, Iterator::numContinuousVars, SurrBasedMinimizer::origNonlinEqTargets, SurrBasedMinimizer::origNonlinIneqLowerBnds, SurrBasedMinimizer::origNonlinIneqUpperBnds, SurrBasedMinimizer::penalty_merit(), Model::primary_response_fn_weights(), SurrBasedLocalMinimizer::responseCenterApprox, SurrBasedLocalMinimizer::responseCenterTruth, SurrBasedLocalMinimizer::responseStarApprox, SurrBasedLocalMinimizer::responseStarTruth, SurrBasedLocalMinimizer::softConvCount, SurrBasedLocalMinimizer::trRatioContractValue, SurrBasedLocalMinimizer::trRatioExpandValue, SurrBasedLocalMinimizer::trustRegionFactor, SurrBasedMinimizer::update_augmented_lagrange_multipliers(), SurrBasedMinimizer::update_filter(), and SurrBasedLocalMinimizer::update_penalty().
Referenced by SurrBasedLocalMinimizer::minimize_surrogates().
void update_penalty | ( | const RealVector & | fns_center_truth, |
const RealVector & | fns_star_truth | ||
) | [private] |
initialize and update the penaltyParameter
Scaling of the penalty value is important to avoid rejecting SBLM iterates which must increase the objective to achieve a reduction in constraint violation. In the basic penalty case, the penalty is ramped exponentially based on the iteration counter. In the adaptive case, the ratio of relative change between center and star points for the objective and constraint violation values is used to rescale penalty values.
References SurrBasedMinimizer::alphaEta, SurrBasedLocalMinimizer::approxSubProbObj, SurrBasedMinimizer::constraint_violation(), Minimizer::constraintTol, SurrBasedMinimizer::eta, SurrBasedMinimizer::etaSequence, Iterator::iteratedModel, SurrBasedLocalMinimizer::meritFnType, Minimizer::objective(), SurrBasedLocalMinimizer::penaltyIterOffset, SurrBasedMinimizer::penaltyParameter, Model::primary_response_fn_weights(), and SurrBasedMinimizer::sbIterNum.
Referenced by SurrBasedLocalMinimizer::tr_ratio_check().
void approx_subprob_objective_eval | ( | const Variables & | surrogate_vars, |
const Variables & | recast_vars, | ||
const Response & | surrogate_response, | ||
Response & | recast_response | ||
) | [static, private] |
static function used to define the approximate subproblem objective.
Objective functions evaluator for solution of approximate subproblem using a RecastModel.
References Response::active_set_request_vector(), SurrBasedLocalMinimizer::approxSubProbCon, SurrBasedLocalMinimizer::approxSubProbModel, SurrBasedLocalMinimizer::approxSubProbObj, SurrBasedMinimizer::augmented_lagrangian_gradient(), SurrBasedMinimizer::augmented_lagrangian_merit(), Response::function_gradient(), Response::function_gradient_view(), Response::function_gradients(), Response::function_value(), Response::function_values(), Iterator::iteratedModel, SurrBasedMinimizer::lagrangian_gradient(), SurrBasedMinimizer::lagrangian_merit(), Model::nonlinear_eq_constraint_targets(), Model::nonlinear_ineq_constraint_lower_bounds(), Model::nonlinear_ineq_constraint_upper_bounds(), Minimizer::numUserPrimaryFns, Minimizer::objective(), Minimizer::objective_gradient(), SurrBasedMinimizer::origNonlinEqTargets, SurrBasedMinimizer::origNonlinIneqLowerBnds, SurrBasedMinimizer::origNonlinIneqUpperBnds, Model::primary_response_fn_weights(), and SurrBasedLocalMinimizer::sblmInstance.
Referenced by SurrBasedLocalMinimizer::SurrBasedLocalMinimizer().
void approx_subprob_constraint_eval | ( | const Variables & | surrogate_vars, |
const Variables & | recast_vars, | ||
const Response & | surrogate_response, | ||
Response & | recast_response | ||
) | [static, private] |
static function used to define the approximate subproblem constraints.
Constraint functions evaluator for solution of approximate subproblem using a RecastModel.
References Response::active_set_derivative_vector(), Response::active_set_request_vector(), SurrBasedLocalMinimizer::approxSubProbCon, SurrBasedLocalMinimizer::approxSubProbObj, Variables::continuous_variables(), Response::function_gradient(), Response::function_gradient_view(), Response::function_gradients(), Response::function_value(), Response::function_values(), Minimizer::numUserPrimaryFns, SurrBasedLocalMinimizer::responseCenterApprox, SurrBasedLocalMinimizer::sblmInstance, and SurrBasedLocalMinimizer::varsCenter.
Referenced by SurrBasedLocalMinimizer::SurrBasedLocalMinimizer().
void hom_objective_eval | ( | int & | mode, |
int & | n, | ||
double * | tau_and_x, | ||
double & | f, | ||
double * | grad_f, | ||
int & | |||
) | [static, private] |
static function used by NPSOL as the objective function in the homotopy constraint relaxation formulation.
NPSOL objective functions evaluator for solution of homotopy constraint relaxation parameter optimization. This constrained optimization problem performs the update of the tau parameter in the homotopy heuristic approach used to relax the constraints in the original problem .
Referenced by SurrBasedLocalMinimizer::relax_constraints().
void hom_constraint_eval | ( | int & | mode, |
int & | ncnln, | ||
int & | n, | ||
int & | nrowj, | ||
int * | needc, | ||
double * | tau_and_x, | ||
double * | c, | ||
double * | cjac, | ||
int & | nstate | ||
) | [static, private] |
static function used by NPSOL as the constraint function in the homotopy constraint relaxation formulation.
NPSOL constraint functions evaluator for solution of homotopy constraint relaxation parameter optimization. This constrained optimization problem performs the update of the tau parameter in the homotopy heuristic approach used to relax the constraints in the original problem.
References Response::active_set(), SurrBasedLocalMinimizer::approxSubProbModel, Model::compute_response(), Model::continuous_variables(), Model::current_response(), Response::function_gradients(), Response::function_values(), SurrBasedLocalMinimizer::nonlinEqTargetsSlack, SurrBasedLocalMinimizer::nonlinIneqLowerBndsSlack, SurrBasedLocalMinimizer::nonlinIneqUpperBndsSlack, Model::num_functions(), Minimizer::numNonlinearEqConstraints, Minimizer::numNonlinearIneqConstraints, ActiveSet::request_vector(), SurrBasedLocalMinimizer::sblmInstance, and SurrBasedLocalMinimizer::tau.
Referenced by SurrBasedLocalMinimizer::relax_constraints().
bool multiLayerBypassFlag [private] |
flags the simultaneous presence of two conditions: (1) additional layerings w/i actual_model (e.g., surrogateModel = layered/nested/layered
-> actual_model = nested/layered), and (2) a user-specification to bypass all layerings within actual_model for the evaluation of truth data (responseCenterTruth and responseStarTruth).
Referenced by SurrBasedLocalMinimizer::find_center_truth(), SurrBasedLocalMinimizer::minimize_surrogates(), and SurrBasedLocalMinimizer::SurrBasedLocalMinimizer().