types.optimization.TrajectoryOptimizationResult
types.optimization.TrajectoryOptimizationResult()Trajectory optimization result.
Result from optimal control problem (OCP) solved via direct transcription, shooting, or collocation.
Fields
state_trajectory : StateTrajectory Optimal state trajectory x(t) (N+1, nx) control_trajectory : ControlSequence Optimal control trajectory u(t) (N, nu) cost : float Total cost J = Σ L(x,u) + Φ(x[N]) success : bool Whether optimization converged message : str Solver message solve_time : float Computation time in seconds iterations : int Number of optimization iterations constraint_violations : Optional[ArrayLike] Dynamics and path constraint violations
Examples
>>> # Minimum-time problem
>>> def running_cost(x, u):
... return 1.0 # Time-optimal
>>>
>>> def terminal_cost(x):
... return 0.0
>>>
>>> result: TrajectoryOptimizationResult = solve_ocp(
... system=pendulum,
... x0=np.array([np.pi, 0]), # Hanging down
... xf=np.array([0, 0]), # Upright
... running_cost=running_cost,
... terminal_cost=terminal_cost,
... horizon=100,
... dt=0.05
... )
>>>
>>> if result['success']:
... x_traj = result['state_trajectory']
... u_traj = result['control_trajectory']
...
... import matplotlib.pyplot as plt
... plt.plot(x_traj[:, 0], label='theta')
... plt.plot(u_traj[:, 0], label='torque')
... plt.legend()
...
... print(f"Minimum time: {result['cost']:.3f} seconds")
>>>
>>> # Check dynamics constraints
>>> if 'constraint_violations' in result:
... max_viol = np.max(np.abs(result['constraint_violations']))
... print(f"Max constraint violation: {max_viol:.2e}")