$extrastylesheet
Dakota
Version 6.2
|
Method for sequential hybrid iteration using multiple optimization and nonlinear least squares methods on multiple models of varying fidelity. More...
Public Member Functions | |
SeqHybridMetaIterator (ProblemDescDB &problem_db) | |
standard constructor | |
SeqHybridMetaIterator (ProblemDescDB &problem_db, Model &model) | |
alternate constructor | |
~SeqHybridMetaIterator () | |
destructor | |
Protected Member Functions | |
void | core_run () |
Performs the hybrid iteration by executing a sequence of iterators, using a similar sequence of models that may vary in fidelity. | |
void | print_results (std::ostream &s) |
print the final iterator results | |
void | derived_init_communicators (ParLevLIter pl_iter) |
derived class contributions to initializing the communicators associated with this Iterator instance | |
void | derived_set_communicators (ParLevLIter pl_iter) |
derived class contributions to setting the communicators associated with this Iterator instance | |
void | derived_free_communicators (ParLevLIter pl_iter) |
derived class contributions to freeing the communicators associated with this Iterator instance | |
IntIntPair | estimate_partition_bounds () |
estimate the minimum and maximum partition sizes that can be utilized by this Iterator | |
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) |
used by IteratorScheduler to set the starting data for a run | |
void | pack_parameters_buffer (MPIPackBuffer &send_buffer, int job_index) |
used by IteratorScheduler to pack starting data for an iterator run | |
void | unpack_parameters_initialize (MPIUnpackBuffer &recv_buffer) |
used by IteratorScheduler to unpack starting data and initialize an iterator run | |
void | pack_results_buffer (MPIPackBuffer &send_buffer, int job_index) |
used by IteratorScheduler to pack results data from an iterator run | |
void | unpack_results_buffer (MPIUnpackBuffer &recv_buffer, int job_index) |
used by IteratorScheduler to unpack results data from an iterator run | |
void | update_local_results (int job_index) |
used by IteratorScheduler to update local results arrays | |
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_initialize(MPIUnpackBuffer) and initialize_iterator(int) to update the active Model and Iterator | |
Private Attributes | |
String | seqHybridType |
empty (default) or "adaptive" | |
StringArray | methodList |
the list of method name identifiers | |
bool | lightwtCtor |
use of lightweight Iterator construction by name | |
IteratorArray | selectedIterators |
the set of iterators, one for each entry in methodList | |
ModelArray | selectedModels |
the set of models, one for each iterator (if not lightweight construction) | |
size_t | seqCount |
hybrid sequence counter: 0 to numIterators-1 | |
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 | |
Friends | |
class | IteratorScheduler |
protect scheduler callback functions from general access |
Method for sequential hybrid iteration using multiple optimization and nonlinear least squares methods on multiple models of varying fidelity.
Sequential hybrid meta-iteration supports 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 iterator), and (2) the adaptive sequential hybrid uses adaptive stopping rules for the iterators that are controlled externally by this method. Any iterator may be used so long as it defines the notion of a final solution which can be passed as starting data for subsequent iterators.
void print_results | ( | std::ostream & | s | ) | [protected, virtual] |
print the final iterator results
This virtual function provides additional iterator-specific final results outputs beyond the function evaluation summary printed in finalize_run().
Reimplemented from Iterator.
References Response::function_values(), Response::is_null(), Variables::is_null(), MetaIterator::iterSched, IteratorScheduler::messagePass, and SeqHybridMetaIterator::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(), ParallelLibrary::bcast_hs(), Iterator::initialize_graphics(), Model::interface_id(), Iterator::iteratedModel, IteratorScheduler::iterator_message_lengths(), IteratorScheduler::iteratorCommRank, IteratorScheduler::iteratorCommSize, IteratorScheduler::iteratorScheduling, IteratorScheduler::iteratorServerId, MetaIterator::iterSched, SeqHybridMetaIterator::lightwtCtor, IteratorScheduler::messagePass, SeqHybridMetaIterator::methodList, Iterator::methodPCIter, IteratorScheduler::miPLIndex, Iterator::num_final_solutions(), IteratorScheduler::numIteratorJobs, IteratorScheduler::numIteratorServers, SeqHybridMetaIterator::pack_parameters_buffer(), Iterator::parallelLib, SeqHybridMetaIterator::parameterSets, SeqHybridMetaIterator::prpResults, ParallelLibrary::recv(), Iterator::response_results(), IteratorScheduler::schedule_iterators(), SeqHybridMetaIterator::selectedIterators, SeqHybridMetaIterator::selectedModels, ParallelLibrary::send(), SeqHybridMetaIterator::seqCount, MPIPackBuffer::size(), Iterator::summaryOutputFlag, and Iterator::variables_results().
Referenced by SeqHybridMetaIterator::core_run().
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 Iterator::finalize_run(), Iterator::initialize_graphics(), Iterator::initialize_run(), IteratorScheduler::iteratorCommRank, IteratorScheduler::iteratorServerId, MetaIterator::iterSched, SeqHybridMetaIterator::methodList, IteratorScheduler::numIteratorServers, SeqHybridMetaIterator::progressThreshold, Iterator::response_results(), SeqHybridMetaIterator::selectedIterators, SeqHybridMetaIterator::selectedModels, SeqHybridMetaIterator::seqCount, Iterator::summaryOutputFlag, and Iterator::variables_results().
Referenced by SeqHybridMetaIterator::core_run().
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 meta-iterator 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 SeqHybridMetaIterator::parameterSets, and SeqHybridMetaIterator::partition_sets().
Referenced by SeqHybridMetaIterator::initialize_iterator(), and SeqHybridMetaIterator::pack_parameters_buffer().