mirror of
https://github.com/nasa/trick.git
synced 2024-12-28 00:48:52 +00:00
92 lines
4.9 KiB
Plaintext
92 lines
4.9 KiB
Plaintext
|
/**
|
||
|
* @anchor MonteCarloPage
|
||
|
* @page LEVEL2 Monte Carlo and Optimization
|
||
|
*
|
||
|
* Monte Carlo is the process of iteratively calling a simulation over a set of predetermined or auto-generated inputs.
|
||
|
* Trick has designed its Monte Carlo capability to run distributed.
|
||
|
*
|
||
|
* @section LEVEL3 Structure
|
||
|
* In particular, Monte Carlo is designed after a "master/slave" model. The master is in charge of creating slaves and
|
||
|
* tasking them to work. There may be any number of slaves distributed over a network. Master and slave communicate through
|
||
|
* sockets. Theoretically, a master and slave need not have the same file system. Each slave is responsible for requesting
|
||
|
* work, accomplishing work and reporting results. The work at hand is running a single simulation iteratively over an input
|
||
|
* space.
|
||
|
*
|
||
|
* @subsection LEVEL4 The Master
|
||
|
* The master is the command center of a Monte Carlo simulation. The master tasks slaves to run the simulation with a given
|
||
|
* set of inputs. The master will task slaves to run in parallel. The master is responsible for keeping the slaves as busy as
|
||
|
* possible. To keep things running smoothly, the master is designed to reassign work when a slave is either dead or running
|
||
|
* too slowly. the master is only in charge of tasking work. The master does not run the simulation itself. The master will
|
||
|
* continue issuing work to the slaves until it is satisfied all simulation runs are complete.
|
||
|
*
|
||
|
* The master's life cycle consists of the following:
|
||
|
*
|
||
|
* - Initialize
|
||
|
* - While there are unresolved runs:
|
||
|
* - Spawn any uninitialized slaves.
|
||
|
* - Dispatch runs to ready slaves.
|
||
|
* - Resolve run based on slave's exit status.
|
||
|
* - Receive results from finished slave's child.
|
||
|
* - Check for timeouts.
|
||
|
* - Shutdown the slaves and terminate.
|
||
|
*
|
||
|
* @see Trick::MonteCarlo
|
||
|
*
|
||
|
* @anchor MonteCarloSlaves
|
||
|
* @subsection LEVEL4 Slaves
|
||
|
*
|
||
|
* A slave consists of a parent and fork()ed children. A slave parent spawns a child using the fork() system call. A
|
||
|
* slave child runs the simulation in its own address space. Only one child exists at a time in a slave. Per slave,
|
||
|
* simulation execution is sequential.
|
||
|
*
|
||
|
* A slave is responsible for requesting work from the master, running a Trick simulation with inputs given by the master,
|
||
|
* dumping recorded data to disk and informing the master when it is finished running its task.
|
||
|
*
|
||
|
* The slave's life cycle consists of the following:
|
||
|
*
|
||
|
* - Initialize
|
||
|
* - Connect to and inform the master of the port over which the slave is listening for dispatches.
|
||
|
* - Until the connection to the master is lost or the master commands a shutdown:
|
||
|
* - Wait for a new dispatch.
|
||
|
* - Process the dispatch.
|
||
|
* - Slave fork()s child.
|
||
|
* - Child runs simulation with varied input.
|
||
|
* - Write the run number processed to the master at child shutdown.
|
||
|
* - Write the exit status to the master.
|
||
|
* - Run the shutdown jobs and terminate.
|
||
|
*
|
||
|
* @see Trick::MonteSlave
|
||
|
*
|
||
|
* @section LEVEL3 Simulation Inputs
|
||
|
*
|
||
|
* The goal of Monte Carlo is to run the simulation over a set of inputs. The inputs that the master passes to the slaves
|
||
|
* are either generated by a statistical algorithm or they are hard-coded by the user in a data file. Inputs may also be
|
||
|
* generated exclusively by user calculations.
|
||
|
*
|
||
|
* @section LEVEL3 Monte Carlo Output
|
||
|
*
|
||
|
* For each simulation run within a Monte Carlo suite of runs, a directory called "MONTE_<name>" is created. Slave output
|
||
|
* is directed to this "MONTE_" directory. Trick recorded data is written in a set of "RUN_" directories within the parent
|
||
|
* "MONTE_" directory. Along with recorded data, stdout, stderr, and send_hs files are written. A file that contains the
|
||
|
* summary of all runs is written to the "MONTE_" directory.
|
||
|
*
|
||
|
* @section LEVEL3 Data Processing
|
||
|
*
|
||
|
* The trick_dp is desinged to understand "MONTE_" directories. When choosing to plot a "MONTE_" directory, trick_dp
|
||
|
* will overlay all curves from each "RUN_" directory within the parent "MONTE_" directory. The plot widget has built
|
||
|
* in features that allow the developer to distinguish what curve goes with what simulation run.
|
||
|
*
|
||
|
* @section LEVEL3 Optimization
|
||
|
*
|
||
|
* Optimization is made possible by creating a framework whereby the developer can change simulation inputs based on
|
||
|
* simulation results. Trick offers a set of job classes that allow the developer to enter the Monte Carlo loop and
|
||
|
* thereby enter the decision making on-the-fly. No canned optimization is available.
|
||
|
*
|
||
|
* This special set of job classes work in concert together in master and slaves. Trick schedules jobs within the master
|
||
|
* at critical points so that they may create inputs to send to the slave as well as receive results from the slave.
|
||
|
* Slave jobs are scheduled to receive simulation inputs from the master as well as send simulation results back to the
|
||
|
* master.
|
||
|
*
|
||
|
* The jobs are specified in the S_define. The jobs are created by the developer.
|
||
|
*/
|