Added doc to simulation __init__
This commit is contained in:
parent
31f137067c
commit
cee9c90c23
@ -1,2 +1,77 @@
|
|||||||
|
"""Simulation package.
|
||||||
|
|
||||||
|
This package provides a way to easily define simulations in such a way that
|
||||||
|
they can be paused and resumed.
|
||||||
|
|
||||||
|
General Structure
|
||||||
|
=================
|
||||||
|
The package consists of 3 main components:
|
||||||
|
- The 'SimulationDeSerializer': Responsible for file IO
|
||||||
|
- The 'Simulator': Responsible for the actual simulating
|
||||||
|
- The 'SimulationManager': Delegates work to the DeSerializer and the
|
||||||
|
Simulator
|
||||||
|
|
||||||
|
The Simulator Class
|
||||||
|
===================
|
||||||
|
For each new simulating task, a new 'Simulator' must be defined. The
|
||||||
|
requirements for this class are the following:
|
||||||
|
- Must define the 'start_or_continue()', 'stop()' and
|
||||||
|
'get_current_results()' functions
|
||||||
|
- Must be picklable in order to store the simulation state
|
||||||
|
|
||||||
|
An example simulator could look as follows:
|
||||||
|
----------------------------------------------------------------
|
||||||
|
class SomeSimulator:
|
||||||
|
def __init__(self, num_iterations):
|
||||||
|
self._num_iterations = num_iterations
|
||||||
|
self._current_iter = 0
|
||||||
|
|
||||||
|
self._simulation_running = False
|
||||||
|
|
||||||
|
self._results = pd.DataFrame()
|
||||||
|
|
||||||
|
def _perform_iteration(self):
|
||||||
|
# Perform iteration and append results
|
||||||
|
...
|
||||||
|
|
||||||
|
def start_or_continue(self) -> None:
|
||||||
|
self._simulation_running = True
|
||||||
|
|
||||||
|
while self._simulation_running and (
|
||||||
|
self._current_iter < self._num_iterations):
|
||||||
|
self._perform_iteration()
|
||||||
|
|
||||||
|
def stop(self) -> None:
|
||||||
|
self._simulation_running = False
|
||||||
|
|
||||||
|
def get_current_results(self) -> pd.DataFrame:
|
||||||
|
return self._results
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
To start a new simulation:
|
||||||
|
----------------------------------------------------------------
|
||||||
|
sim_mgr = SimulationManager(results_dir="results", saves_dir="saves")
|
||||||
|
|
||||||
|
sim = SomeSimulator(num_iterations=100)
|
||||||
|
sim_mgr.configure_simulation(simulator=sim, name='Some Simulation', \
|
||||||
|
column_labels=['label1', 'label2'])
|
||||||
|
sim_mgr.start()
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
To check for a previously interrupted simulation and continue:
|
||||||
|
----------------------------------------------------------------
|
||||||
|
sim_mgr = SimulationManager(results_dir="results", saves_dir="saves")
|
||||||
|
|
||||||
|
unfinished_sims = sim_mgr.get_unfinished()
|
||||||
|
|
||||||
|
if len(unfinished_sims) > 0:
|
||||||
|
sim_mgr.load_unfinished(unfinished_sims[0])
|
||||||
|
sim_mgr.simulate()
|
||||||
|
----------------------------------------------------------------
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
from utility.simulation.management import SimulationManager, \
|
from utility.simulation.management import SimulationManager, \
|
||||||
SimulationDeSerializer
|
SimulationDeSerializer
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user