embodichain.learning.rl.policies#
RL policy interfaces and construction#
Policy defines the action, action-evaluation and value interfaces used by RL
algorithms. ActorCritic combines a Gaussian action policy with a value network;
ActorOnly supplies the same rollout contract without a learned value function.
The registry builds policies from registered names and observation-group settings.
General MLP construction and feature normalization are provided separately by
embodichain.learning.models.
Abstract base class that all RL policies must implement. |
|
TensorDict actor-critic with a learnable Gaussian action distribution. |
|
Actor-only policy for algorithms that do not use a value function (e.g., GRPO). |
|
|
|
|
|
|
Build a policy from config using spaces for extensibility. |
|
Resolve actor and critic observation groups from policy configuration. |
RL policies and registration, loaded on demand.
Classes:
TensorDict actor-critic with a learnable Gaussian action distribution. |
|
Actor-only policy for algorithms that do not use a value function (e.g., GRPO). |
|
Abstract base class that all RL policies must implement. |
Functions:
|
Build a policy from config using spaces for extensibility. |
|
|
|
|
|
Resolve actor and critic observation groups from policy configuration. |
- class embodichain.learning.rl.policies.ActorCritic[source]#
Bases:
PolicyTensorDict actor-critic with a learnable Gaussian action distribution.
- Parameters:
obs_dim (
int) – Actor observation dimension.action_dim (
int) – Action dimension.device (
device) – Device used by the policy modules and distribution parameters.actor (
Module) – Module that maps actor observations to action means.critic (
Module) – Module that maps critic observations to scalar values.critic_obs_dim (
int|None) – Separate critic observation dimension.Nonereuses actor observations.actor_obs_groups (
Sequence[str] |None) – Ordered observation groups consumed by the actor.critic_obs_groups (
Sequence[str] |None) – Ordered observation groups consumed by the critic.actor_obs_normalization (
bool) – Whether to normalize actor observations.critic_obs_normalization (
bool) – Whether to normalize critic observations.initial_action_std (
float) – Initial standard deviation for every action.action_std_range (
tuple[float,float]) – Inclusive clamp range applied to standard deviation.
Methods:
__init__(obs_dim, action_dim, device, actor, ...)Initialize internal Module state, shared by both nn.Module and ScriptModule.
evaluate_actions(tensordict)Evaluate actions and return current policy outputs.
forward(tensordict[, deterministic])Write sampled actions and value estimates into the TensorDict.
get_differentiable_action(tensordict[, ...])Sample an action with pathwise gradients.
get_value(tensordict)Write value estimate for the given observations into the TensorDict.
Return actor-side and critic-side trainable parameter groups.
update_normalization(tensordict)Update actor and critic observation statistics from environment data.
Attributes:
Return the clamped state-independent action standard deviation.
- __init__(obs_dim, action_dim, device, actor, critic, critic_obs_dim=None, actor_obs_groups=None, critic_obs_groups=None, actor_obs_normalization=False, critic_obs_normalization=False, initial_action_std=1.0, action_std_range=(1e-06, 1000000.0))[source]#
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- property action_std: Tensor#
Return the clamped state-independent action standard deviation.
- evaluate_actions(tensordict)[source]#
Evaluate actions and return current policy outputs.
- Parameters:
tensordict (
TensorDict) – TensorDict containingobs,action, and optionalcritic_obs.- Return type:
TensorDict- Returns:
A new TensorDict containing sample_log_prob, entropy, and value.
- forward(tensordict, deterministic=False)[source]#
Write sampled actions and value estimates into the TensorDict.
- Return type:
TensorDict
- get_differentiable_action(tensordict, deterministic=False)[source]#
Sample an action with pathwise gradients.
- Return type:
TensorDict
- get_value(tensordict)[source]#
Write value estimate for the given observations into the TensorDict.
- Parameters:
tensordict (
TensorDict) – Input TensorDict containingobsand, for policies with a privileged critic,critic_obs.- Return type:
TensorDict- Returns:
TensorDict with value populated.
- class embodichain.learning.rl.policies.ActorOnly[source]#
Bases:
PolicyActor-only policy for algorithms that do not use a value function (e.g., GRPO).
Same interface as ActorCritic: get_action and evaluate_actions return (action, log_prob, value), but value is always zeros since no critic is used.
Methods:
__init__(obs_dim, action_dim, device, actor)Initialize internal Module state, shared by both nn.Module and ScriptModule.
evaluate_actions(tensordict)Evaluate actions and return current policy outputs.
forward(tensordict[, deterministic])Write sampled actions and value estimates into the TensorDict.
get_differentiable_action(tensordict[, ...])Sample an action with pathwise gradients.
get_value(tensordict)Write value estimate for the given observations into the TensorDict.
- __init__(obs_dim, action_dim, device, actor, actor_obs_groups=None)[source]#
Initialize internal Module state, shared by both nn.Module and ScriptModule.
- evaluate_actions(tensordict)[source]#
Evaluate actions and return current policy outputs.
- Parameters:
tensordict (
TensorDict) – TensorDict containingobs,action, and optionalcritic_obs.- Return type:
TensorDict- Returns:
A new TensorDict containing sample_log_prob, entropy, and value.
- forward(tensordict, deterministic=False)[source]#
Write sampled actions and value estimates into the TensorDict.
- Return type:
TensorDict
- class embodichain.learning.rl.policies.Policy[source]#
Bases:
Module,ABCAbstract base class that all RL policies must implement.
A Policy: - Encapsulates neural networks that are trained by RL algorithms - Handles internal computations (e.g., network output → distribution) - Provides a uniform interface for algorithms (PPO, SAC, etc.)
Methods:
__init__()Initialize internal Module state, shared by both nn.Module and ScriptModule.
evaluate_actions(tensordict)Evaluate actions and return current policy outputs.
forward(tensordict[, deterministic])Write sampled actions and value estimates into the TensorDict.
get_action(tensordict[, deterministic])Sample actions into the provided TensorDict without gradients.
get_differentiable_action(tensordict[, ...])Sample actions while preserving gradients to policy parameters.
get_value(tensordict)Write value estimate for the given observations into the TensorDict.
Attributes:
Device where the policy parameters are located.
- device: torch.device#
Device where the policy parameters are located.
- abstract evaluate_actions(tensordict)[source]#
Evaluate actions and return current policy outputs.
- Parameters:
tensordict (
TensorDict) – TensorDict containingobs,action, and optionalcritic_obs.- Return type:
TensorDict- Returns:
A new TensorDict containing sample_log_prob, entropy, and value.
- abstract forward(tensordict, deterministic=False)[source]#
Write sampled actions and value estimates into the TensorDict.
- Return type:
TensorDict
- get_action(tensordict, deterministic=False)[source]#
Sample actions into the provided TensorDict without gradients.
- Parameters:
tensordict (
TensorDict) – Input TensorDict containingobsand, for policies with a privileged critic,critic_obs.deterministic (
bool) – If True, return the mean action; otherwise sample
- Return type:
TensorDict- Returns:
TensorDict with action, sample_log_prob, and value populated.
- get_differentiable_action(tensordict, deterministic=False)[source]#
Sample actions while preserving gradients to policy parameters.
Stochastic implementations must use a reparameterized sample such as
torch.distributions.Distribution.rsample(). The base implementation fails explicitly to prevent a non-reparameterizedsample()call from silently producing zero pathwise gradients.- Parameters:
tensordict (
TensorDict) – Input TensorDict containingobsand, for policies with a privileged critic,critic_obs.deterministic (
bool) – If True, return a differentiable deterministic action.
- Return type:
TensorDict- Returns:
TensorDict with differentiable policy outputs populated.
- Raises:
NotImplementedError – If the policy has no differentiable sampling implementation.
- abstract get_value(tensordict)[source]#
Write value estimate for the given observations into the TensorDict.
- Parameters:
tensordict (
TensorDict) – Input TensorDict containingobsand, for policies with a privileged critic,critic_obs.- Return type:
TensorDict- Returns:
TensorDict with value populated.
- training: bool#
- embodichain.learning.rl.policies.build_policy(policy_block, obs_space, action_space, device, actor=None, critic=None, critic_obs_space=None)[source]#
Build a policy from config using spaces for extensibility.
Built-in MLP policies still resolve flattened obs_dim / action_dim, while custom policies may accept richer obs_space / action_space inputs.
- Return type:
- embodichain.learning.rl.policies.get_policy_class(name)[source]#
- Return type:
Optional[Type[Policy]]
- embodichain.learning.rl.policies.resolve_policy_obs_groups(policy_block)[source]#
Resolve actor and critic observation groups from policy configuration.
- Parameters:
policy_block (
Mapping[str,object]) – Policy configuration containing an optionalobs_groupsmapping.- Return type:
tuple[tuple[str,...] |None,tuple[str,...] |None]- Returns:
Actor and critic observation group names. Both are
Nonewhen the existing flatten-all behavior is selected.- Raises:
TypeError – If the observation-group configuration is malformed.
ValueError – If the actor observation set is empty.
Policy registry#
RL policy registration and construction for actor-critic and actor-only models.
Functions:
|
Build a policy from config using spaces for extensibility. |
|
Resolve actor and critic observation groups from policy configuration. |
- embodichain.learning.rl.policies.registry.build_policy(policy_block, obs_space, action_space, device, actor=None, critic=None, critic_obs_space=None)[source]#
Build a policy from config using spaces for extensibility.
Built-in MLP policies still resolve flattened obs_dim / action_dim, while custom policies may accept richer obs_space / action_space inputs.
- Return type:
- embodichain.learning.rl.policies.registry.resolve_policy_obs_groups(policy_block)[source]#
Resolve actor and critic observation groups from policy configuration.
- Parameters:
policy_block (
Mapping[str,object]) – Policy configuration containing an optionalobs_groupsmapping.- Return type:
tuple[tuple[str,...] |None,tuple[str,...] |None]- Returns:
Actor and critic observation group names. Both are
Nonewhen the existing flatten-all behavior is selected.- Raises:
TypeError – If the observation-group configuration is malformed.
ValueError – If the actor observation set is empty.
Observation normalization#
ActorCritic can maintain independent actor and critic observation moments.
It uses the shared EmpiricalNormalizer; policy buffers preserve the statistics
in checkpoints. Observation selection and normalization-update timing remain
part of the RL rollout contract.