curobo.opt.particle.particle_opt_base module¶
- class ParticleOptConfig(
- d_action: 'int',
- action_lows: 'List[float]',
- action_highs: 'List[float]',
- action_horizon: 'int',
- horizon: 'int',
- n_iters: 'int',
- cold_start_n_iters: 'Union[int, None]',
- rollout_fn: 'RolloutBase',
- tensor_args: 'TensorDeviceType',
- use_cuda_graph: 'bool',
- store_debug: 'bool',
- debug_info: 'Any',
- n_problems: 'int',
- num_particles: 'Union[int, None]',
- sync_cuda_time: 'bool',
- use_coo_sparse: 'bool',
- gamma: float,
- sample_mode: curobo.opt.particle.particle_opt_base.SampleMode,
- seed: int,
- calculate_value: bool,
- store_rollouts: bool,
Bases:
OptimizerConfig
- sample_mode: SampleMode¶
- static create_data_dict(
- data_dict: Dict,
- rollout_fn: RolloutBase,
- tensor_args: TensorDeviceType = TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32),
- child_dict: Dict | None = None,
Helper function to create dictionary from optimizer parameters and rollout class.
- Parameters:
data_dict – optimizer parameters dictionary.
rollout_fn – rollout function.
tensor_args – tensor cuda device.
child_dict – new dictionary where parameters will be stored.
- Returns:
Dictionary with parameters to create a
OptimizerConfig
- cold_start_n_iters: int | None¶
Number of iterations to run optimization during the first instance. Setting to None will use n_iters. This parameter is useful in MPC like settings where we need to run many iterations during initialization (cold start) and then run only few iterations (warm start).
- rollout_fn: RolloutBase¶
Rollout function to use for computing cost, given optimization variables.
- tensor_args: TensorDeviceType¶
Tensor device to use for optimization.
- use_cuda_graph: bool¶
Capture optimization iteration in a cuda graph and replay graph instead of eager execution. Enabling this can make optimization 10x faster. But changing control flow, tensor shapes, or problem type is not allowed.
- store_debug: bool¶
Record debugging data such as optimization variables, and cost at every iteration. Enabling this will disable cuda graph.
- debug_info: Any¶
Use this to record additional attributes from rollouts.
- num_particles: int | None¶
Number of particles to use per problem. Common optimization solvers use many particles to optimize a single problem. E.g., MPPI rolls out many parallel samples and computes a weighted mean. In cuRobo, Quasi-Newton solvers use particles to run many line search magnitudes. Total optimization batch size = n_problems * num_particles.
- class ParticleOptBase(
- config: ParticleOptConfig | None = None,
Bases:
Optimizer
,ParticleOptConfig
Base class for sampling based controllers.
Base optimization solver class
- Parameters:
config – Initialized with parameters from a dataclass.
- abstract _get_action_seq(
- mode=<enum 'SampleMode'>,
Get action sequence to execute on the system based on current control distribution
- Parameters:
mode – {‘mean’, ‘sample’} how to choose action to be executed ‘mean’ plays mean action and ‘sample’ samples from the distribution
- update_seed(init_act)¶
- abstract _update_distribution(
- trajectories: Trajectory,
Update current control distribution using rollout trajectories
- Parameters:
trajectories –
dict Rollout trajectories. Contains the following fields observations : torch.tensor
observations along rollouts
- actionstorch.tensor
actions sampled from control distribution along rollouts
- coststorch.tensor
step costs along rollouts
- reset()¶
Reset the optimizer
- abstract _calc_val(
- trajectories: Trajectory,
Calculate value of state given rollouts from a policy
- check_convergence()¶
Checks if controller has converged Returns False by default
- generate_rollouts(
- init_act=None,
Samples a batch of actions, rolls out trajectories for each particle and returns the resulting observations, costs, actions
- Parameters:
state (dict or np.ndarray) – Initial state to set the simulation problem to
- _optimize(
- init_act: Tensor,
- shift_steps=0,
- n_iters=None,
Optimize for best action at current state
- Parameters:
state (torch.Tensor) – state to calculate optimal action from
calc_val (bool) – If true, calculate the optimal value estimate of the state along with action
- Returns:
action (torch.Tensor) – next action to execute
value (float) – optimal value estimate (default: 0.)
info (dict) – dictionary with side-information
- update_nproblems(
- n_problems,
Update the number of problems that need to be optimized.
- Parameters:
n_problems – number of problems.
- abstract _shift(shift_steps=0)¶
Shift the variables in the solver to hotstart the next timestep.
- Parameters:
shift_steps – Number of timesteps to shift.
- _update_problem_kernel( )¶
Update matrix used to map problem index to number of particles.
- Parameters:
n_problems – Number of optimization problems.
num_particles – Number of particles per problem.
- static create_data_dict(
- data_dict: Dict,
- rollout_fn: RolloutBase,
- tensor_args: TensorDeviceType = TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32),
- child_dict: Dict | None = None,
Helper function to create dictionary from optimizer parameters and rollout class.
- Parameters:
data_dict – optimizer parameters dictionary.
rollout_fn – rollout function.
tensor_args – tensor cuda device.
child_dict – new dictionary where parameters will be stored.
- Returns:
Dictionary with parameters to create a
OptimizerConfig
- get_all_rollout_instances() List[RolloutBase] ¶
Get all instances of Rollout class in the optimizer.
- get_nproblem_tensor(x)¶
This function takes an input tensor of shape (n_problem,….) and converts it into (n_particles,…).
- optimize(
- opt_tensor: Tensor,
- shift_steps=0,
- n_iters=None,
Find a solution through optimization given the initial values for variables.
- Parameters:
opt_tensor – Initial value of optimization variables. Shape: [n_problems, action_horizon, d_action]
shift_steps – Shift variables along action_horizon. Useful in mpc warm-start setting.
n_iters – Override number of iterations to run optimization.
- Returns:
Optimized values returned as a tensor of shape [n_problems, action_horizon, d_action].
- reset_cuda_graph()¶
Reset CUDA Graphs. This does not work, workaround is to create a new instance.
- reset_seed()¶
Reset seeds.
- reset_shape()¶
Reset any flags in rollout class. Useful to reinitialize tensors for a new shape.
- update_num_particles_per_problem(
- num_particles_per_problem,
- update_params(
- goal: Goal,
Update parameters in the
curobo.rollout.rollout_base.RolloutBase
instance.- Parameters:
goal – parameters to update rollout instance.
- cold_start_n_iters: int | None¶
Number of iterations to run optimization during the first instance. Setting to None will use n_iters. This parameter is useful in MPC like settings where we need to run many iterations during initialization (cold start) and then run only few iterations (warm start).
- rollout_fn: RolloutBase¶
Rollout function to use for computing cost, given optimization variables.
- tensor_args: TensorDeviceType¶
Tensor device to use for optimization.
- use_cuda_graph: bool¶
Capture optimization iteration in a cuda graph and replay graph instead of eager execution. Enabling this can make optimization 10x faster. But changing control flow, tensor shapes, or problem type is not allowed.
- store_debug: bool¶
Record debugging data such as optimization variables, and cost at every iteration. Enabling this will disable cuda graph.
- debug_info: Any¶
Use this to record additional attributes from rollouts.
- num_particles: int | None¶
Number of particles to use per problem. Common optimization solvers use many particles to optimize a single problem. E.g., MPPI rolls out many parallel samples and computes a weighted mean. In cuRobo, Quasi-Newton solvers use particles to run many line search magnitudes. Total optimization batch size = n_problems * num_particles.
- use_coo_sparse: bool¶
Matmul with a Sparse tensor is used to create particles for each problem index to save memory and compute. Some versions of pytorch do not support coo sparse, specifically during torch profile runs. Set this to False to use a standard tensor.
- sample_mode: SampleMode¶