Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
SequentialHybridStrategy Class Reference

Strategy for sequential hybrid minimization using multiple optimization and nonlinear least squares methods on multiple models of varying fidelity. More...

Inheritance diagram for SequentialHybridStrategy:
HybridStrategy Strategy

List of all members.

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 Variablesvariables_results () const
 return the final solution from selectedIterators (variables)
const Responseresponse_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 &param_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

Detailed Description

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.


Member Function Documentation

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]
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().


The documentation for this class was generated from the following files: