Strategy for sequential hybrid minimization using multiple optimization and nonlinear least squares methods on multiple models of varying fidelity. More...
Public Member Functions | |
SequentialHybridStrategy (ProblemDescDB &problem_db) | |
constructor | |
~SequentialHybridStrategy () | |
destructor | |
Protected Member Functions | |
void | run_strategy () |
Performs the hybrid minimization strategy by executing multiple iterators on different models of varying fidelity. | |
const Variables & | variables_results () const |
return the final solution from selectedIterators (variables) | |
const Response & | response_results () const |
return the final solution from selectedIterators (response) | |
void | initialize_iterator (int job_index) |
initialize the iterator about to be executed within a parallel iterator scheduling function (serve_iterators() or static_schedule_iterators()) | |
void | pack_parameters_buffer (MPIPackBuffer &send_buffer, int job_index) |
pack a send_buffer for assigning an iterator job to a server | |
void | unpack_parameters_buffer (MPIUnpackBuffer &recv_buffer) |
unpack a recv_buffer for accepting an iterator job from the scheduler | |
void | pack_results_buffer (MPIPackBuffer &send_buffer, int job_index) |
pack a send_buffer for returning iterator results from a server | |
void | unpack_results_buffer (MPIUnpackBuffer &recv_buffer, int job_index) |
unpack a recv_buffer for accepting iterator results from a server | |
void | update_local_results (int job_index) |
update local PRP results arrays with current iteration results | |
Private Member Functions | |
void | run_sequential () |
run a sequential hybrid | |
void | run_sequential_adaptive () |
run a sequential adaptive hybrid | |
void | partition_sets (size_t num_sets, int job_index, size_t &start_index, size_t &job_size) |
convert num_sets and job_index into a start_index and job_size for extraction from parameterSets | |
void | extract_parameter_sets (int job_index, VariablesArray &partial_param_sets) |
extract partial_param_sets from parameterSets based on job_index | |
void | update_local_results (PRPArray &prp_results, int job_id) |
update the partial set of final results from the local iterator execution | |
void | initialize_iterator (const VariablesArray ¶m_sets) |
called by unpack_parameters_buffer(MPIUnpackBuffer) and initialize_iterator(int) to update the active Model and Iterator | |
Private Attributes | |
String | hybridType |
sequential or sequential_adaptive | |
size_t | seqCount |
hybrid sequence counter: 0 to numIterators-1 | |
Real | progressMetric |
the amount of progress made in a single iterator++ cycle within a sequential adaptive hybrid | |
Real | progressThreshold |
when the progress metric falls below this threshold, the sequential adaptive hybrid switches to the next method | |
PRP2DArray | prpResults |
2-D array of results corresponding to numIteratorJobs, one set of results per job (iterators may return multiple final solutions) | |
VariablesArray | parameterSets |
1-D array of variable starting points for the iterator jobs |
Strategy for sequential hybrid minimization using multiple optimization and nonlinear least squares methods on multiple models of varying fidelity.
The sequential hybrid minimization strategy has two approaches: (1) the non-adaptive sequential hybrid runs one method to completion, passes its best results as the starting point for a subsequent method, and continues this succession until all methods have been executed (the stopping rules are controlled internally by each minimizer), and (2) the adaptive sequential hybrid uses adaptive stopping rules for the minimizers that are controlled externally by the strategy. Note that while the strategy is targeted at minimizers, any iterator may be used so long as it defines the notion of a final solution which can be passed as the starting point for subsequent iterators.
void pack_parameters_buffer | ( | MPIPackBuffer & | send_buffer, |
int | job_index | ||
) | [inline, protected, virtual] |
pack a send_buffer for assigning an iterator job to a server
This virtual function redefinition is executed on the dedicated master processor for self scheduling. It is not used for peer partitions.
Reimplemented from Strategy.
References SequentialHybridStrategy::extract_parameter_sets(), and SequentialHybridStrategy::seqCount.
Referenced by SequentialHybridStrategy::run_sequential().
void unpack_parameters_buffer | ( | MPIUnpackBuffer & | recv_buffer | ) | [inline, protected, virtual] |
unpack a recv_buffer for accepting an iterator job from the scheduler
This virtual function redefinition is executed on an iterator server for dedicated master self scheduling. It is not used for peer partitions.
Reimplemented from Strategy.
References SequentialHybridStrategy::initialize_iterator(), and SequentialHybridStrategy::seqCount.
void pack_results_buffer | ( | MPIPackBuffer & | send_buffer, |
int | job_index | ||
) | [inline, protected, virtual] |
pack a send_buffer for returning iterator results from a server
This virtual function redefinition is executed either on an iterator server for dedicated master self scheduling or on peers 2 through n for static scheduling.
Reimplemented from Strategy.
References SequentialHybridStrategy::prpResults.
void unpack_results_buffer | ( | MPIUnpackBuffer & | recv_buffer, |
int | job_index | ||
) | [inline, protected, virtual] |
unpack a recv_buffer for accepting iterator results from a server
This virtual function redefinition is executed on an strategy master (either the dedicated master processor for self scheduling or peer 1 for static scheduling).
Reimplemented from Strategy.
References SequentialHybridStrategy::prpResults.
void run_sequential | ( | ) | [private] |
run a sequential hybrid
In the sequential nonadaptive case, there is no interference with the iterators. Each runs until its own convergence criteria is satisfied. Status: fully operational.
References Iterator::accepts_multiple_points(), ParallelLibrary::bcast_i(), ParallelLibrary::bcast_si(), Response::function_values(), Strategy::graph2DFlag, Iterator::initialize_graphics(), Model::interface_id(), Response::is_null(), Variables::is_null(), Strategy::iteratorCommRank, Strategy::iteratorCommSize, Strategy::iteratorServerId, HybridStrategy::methodList, Iterator::num_final_solutions(), Strategy::numIteratorJobs, HybridStrategy::numIterators, Strategy::numIteratorServers, SequentialHybridStrategy::pack_parameters_buffer(), Strategy::parallelLib, SequentialHybridStrategy::parameterSets, Strategy::paramsMsgLen, SequentialHybridStrategy::prpResults, ParallelLibrary::recv_si(), Iterator::response_results(), Strategy::resultsMsgLen, Iterator::returns_multiple_points(), Strategy::schedule_iterators(), HybridStrategy::selectedIterators, ParallelLibrary::send_si(), SequentialHybridStrategy::seqCount, MPIPackBuffer::size(), Strategy::stratIterDedMaster, Strategy::stratIterMessagePass, Strategy::tabularDataFile, Strategy::tabularDataFlag, HybridStrategy::userDefinedModels, Iterator::variables_results(), Strategy::worldRank, and Dakota::write_data().
Referenced by SequentialHybridStrategy::run_strategy().
void run_sequential_adaptive | ( | ) | [private] |
run a sequential adaptive hybrid
In the sequential adaptive case, there is interference with the iterators through the use of the ++ overloaded operator. iterator++ runs the iterator for one cycle, after which a progress_metric is computed. This progress metric is used to dictate method switching instead of each iterator's internal convergence criteria. Status: incomplete.
References Strategy::graph2DFlag, HybridStrategy::methodList, HybridStrategy::numIterators, SequentialHybridStrategy::progressMetric, SequentialHybridStrategy::progressThreshold, Strategy::run_iterator(), HybridStrategy::selectedIterators, SequentialHybridStrategy::seqCount, Strategy::tabularDataFile, Strategy::tabularDataFlag, HybridStrategy::userDefinedModels, and Strategy::worldRank.
Referenced by SequentialHybridStrategy::run_strategy().
void extract_parameter_sets | ( | int | job_index, |
VariablesArray & | partial_param_sets | ||
) | [inline, private] |
extract partial_param_sets from parameterSets based on job_index
This convenience function is executed on an iterator master (static scheduling) or a strategy master (self scheduling) at run initialization time and has access to the full parameterSets array (this is All-Reduced for all peers at the completion of each cycle in run_sequential()).
References SequentialHybridStrategy::parameterSets, and SequentialHybridStrategy::partition_sets().
Referenced by SequentialHybridStrategy::initialize_iterator(), and SequentialHybridStrategy::pack_parameters_buffer().