The run_problem function#
In the Brachistochrone example we used two methods on the OpenMDAO Problem class to execute the model.
run_model
Takes the current model design variables and runs a single execution of the Problem’s model.
Any iterative systems are converged, but no optimization is performed.
When using dymos with an optimizer-driven implicit transcription, run_model
will not produce a physically valid trajectory on output.
If using a solver-driven transcription, the collocation defects will be satisfied (if possible) and the resulting outputs will provide a physically valid trajectory (to the extent possible given the collocation grid).
run_driver
runs a driver wrapped around the model (typically done for optimization) and repeatedly executes run_model
until the associated optimization problem is satisfied.
This approach will provide a physically valid trajectory, to the extent that the grid is sufficient to accurately model the dynamics.
But commonly, we want to do the following when we run dymos
Automatically record states, controls, and parameters at the arrived-upon “final” solution.
Automatically provide explicit simulation of the solution to verify the accuracy of the collocation.
Automatically load in the results from a previous case as the initial guess for an optimization.
Iteratively re-optimize the problem with different grid settings to attempt to minimize grid error (i.e. grid refinement).
To remove the need to repeatedly setup the code to do this, dymos provides a function called run_problem
.
- dymos.run_problem(problem, refine_method='hp', refine_iteration_limit=0, run_driver=True, simulate=False, restart=None, solution_record_file='dymos_solution.db', simulation_record_file='dymos_simulation.db', make_plots=False, plot_dir='plots', case_prefix=None, reset_iter_counts=True, simulate_kwargs=None, plot_kwargs=None)[source]
A Dymos-specific interface to execute an OpenMDAO problem containing Dymos Trajectories or Phases. This function can iteratively call run_driver to perform grid refinement, and automatically call simulate following a run to check the validity of a result.
- Parameters:
- problemom.Problem
The OpenMDAO problem object to be run, presumed to contain one or more dymos phases.
- refine_methodString
The choice of refinement algorithm to use for grid refinement. Current options are ‘hp’ for h-then-p adaptive or ‘ph’ for ‘p-then-h’ adaptive.
- refine_iteration_limitint
The maximum number of passes through the grid refinement algorithm to be made.
- run_driverbool
If True, run the driver attached to the problem, otherwise just run the model one time.
- simulatebool
If True, perform a simulation of any Trajectories found in the Problem model after the driver has been run and grid refinement is complete.
- restartstr, Case, or None
If given as a dict returned by om.CaseReader.get_case, automatically load the states, controls, and parameters as given in the provided case as the initial guess for the next run. If given as a string, assume the user is providing the path to a CaseRecorder file that contains a case named “final” that the user wants to use as the guess for the case.
- make_plotsbool
If True, automatically generate plots of all timeseries outputs. These are stored in the reports subdirectory generated by OpenMDAO.
- solution_record_filestr
Path to case recorder file use to store results from solution.
- simulation_record_filestr
Path to case recorder file use to store results from simulation.
- plot_dirstr
Name of the plot directory to be created.
- simulate_kwargsdict
A dictionary of argument: value pairs to be passed to simulate. These are ignored when simulate=False.
- plot_kwargsdict
A dictionary of argument: value pairs that are passed to timeseries_plots. Only used when make_plots=True.
- case_prefixstr or None
Prefix to prepend to coordinates when recording.
- reset_iter_countsbool
If True and model has been run previously, reset all iteration counters.