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.


The OpenMDAO problem object to be run, presumed to contain one or more dymos phases.


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.


The maximum number of passes through the grid refinement algorithm to be made.


If True, run the driver attached to the problem, otherwise just run the model one time.


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.


If True, automatically generate plots of all timeseries outputs. These are stored in the reports subdirectory generated by OpenMDAO.


Path to case recorder file use to store results from solution.


Path to case recorder file use to store results from simulation.


Name of the plot directory to be created.


A dictionary of argument: value pairs to be passed to simulate. These are ignored when simulate=False.


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.


If True and model has been run previously, reset all iteration counters.