https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Moose::LibtorchActionDistribution Class Referenceabstract

Reusable continuous-action distribution interface for actor policies. More...

#include <LibtorchActionDistribution.h>

Inheritance diagram for Moose::LibtorchActionDistribution:
[legend]

Public Member Functions

 LibtorchActionDistribution (const std::string &name, unsigned int num_inputs, unsigned int num_outputs, torch::DeviceType device_type=torch::kCPU, torch::ScalarType scalar_type=torch::kDouble, const std::vector< Real > &output_scaling_factors={})
 Build an action-distribution module for an actor network.
 
virtual void initialize (c10::optional< at::Generator > generator=c10::nullopt)=0
 Initialize the trainable distribution parameters.
 
virtual void reset (const torch::Tensor &input)=0
 Refresh cached distribution parameters from the latest actor features.
 
virtual torch::Tensor sample (c10::optional< at::Generator > generator=c10::nullopt) const =0
 Draw a stochastic action sample in physical units.
 
virtual torch::Tensor deterministicAction () const =0
 Return the deterministic action used for evaluation.
 
virtual torch::Tensor logProbability (const torch::Tensor &action) const =0
 Evaluate the log-probability of an action under the current distribution.
 
virtual torch::Tensor entropy () const =0
 Compute the entropy of the current distribution.
 
virtual bool isBounded () const =0
 Tell callers whether the distribution enforces explicit action bounds.
 
void synchronizeScalingFactorsFromBuffer ()
 Sync cached scaling metadata from the registered buffers after loading state.
 

Protected Member Functions

torch::Tensor prepareFeatures (const torch::Tensor &input) const
 Convert actor features to the configured device and scalar type.
 
torch::Tensor prepareAction (const torch::Tensor &action) const
 Convert actions to the configured device and scalar type.
 
const torch::Tensor & actionScaleTensor () const
 Return the registered tensor that stores per-action scaling factors.
 

Protected Attributes

const std::string _name
 Module name used for registration and serialization.
 
const unsigned int _num_inputs
 Number of actor features feeding this distribution.
 
const unsigned int _num_outputs
 Number of action dimensions produced by this distribution.
 
const torch::DeviceType _device_type
 Torch device used by this distribution.
 
const torch::ScalarType _data_type
 Torch scalar type used by this distribution.
 
std::vector< Real > _output_scaling_factors
 Cached per-action scaling factors applied in physical units.
 
torch::Tensor _action_scale_tensor
 Registered libtorch buffer holding the per-action scaling factors.
 

Detailed Description

Reusable continuous-action distribution interface for actor policies.

Definition at line 27 of file LibtorchActionDistribution.h.

Constructor & Destructor Documentation

◆ LibtorchActionDistribution()

Moose::LibtorchActionDistribution::LibtorchActionDistribution ( const std::string &  name,
unsigned int  num_inputs,
unsigned int  num_outputs,
torch::DeviceType  device_type = torch::kCPU,
torch::ScalarType  scalar_type = torch::kDouble,
const std::vector< Real > &  output_scaling_factors = {} 
)

Build an action-distribution module for an actor network.

Parameters
nameModule name used for registration and serialization.
num_inputsNumber of actor features feeding the distribution.
num_outputsNumber of action dimensions produced by the distribution.
device_typeTorch device used by the module.
scalar_typeTorch scalar type used by the module.
output_scaling_factorsOptional per-action scaling applied in physical units.

Definition at line 52 of file LibtorchActionDistribution.C.

59 : _name(name),
60 _num_inputs(num_inputs),
61 _num_outputs(num_outputs),
62 _device_type(device_type),
63 _data_type(data_type),
64 _output_scaling_factors(setActionScalingFactors(output_scaling_factors, num_outputs))
65{
66 auto action_scale = _output_scaling_factors;
68 _action_scale_tensor = register_buffer(
69 "action_scale", _action_scale_tensor.transpose(0, 1).to(_data_type).to(_device_type));
70}
const std::string name
Definition Setup.h:21
const torch::DeviceType _device_type
Torch device used by this distribution.
const std::string _name
Module name used for registration and serialization.
torch::Tensor _action_scale_tensor
Registered libtorch buffer holding the per-action scaling factors.
std::vector< Real > _output_scaling_factors
Cached per-action scaling factors applied in physical units.
const unsigned int _num_outputs
Number of action dimensions produced by this distribution.
const unsigned int _num_inputs
Number of actor features feeding this distribution.
const torch::ScalarType _data_type
Torch scalar type used by this distribution.
void vectorToTensor(const std::vector< DataType > &vector, torch::Tensor &tensor, const bool detach=false)

Member Function Documentation

◆ actionScaleTensor()

const torch::Tensor & Moose::LibtorchActionDistribution::actionScaleTensor ( ) const
inlineprotected

◆ deterministicAction()

virtual torch::Tensor Moose::LibtorchActionDistribution::deterministicAction ( ) const
pure virtual

Return the deterministic action used for evaluation.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ entropy()

virtual torch::Tensor Moose::LibtorchActionDistribution::entropy ( ) const
pure virtual

Compute the entropy of the current distribution.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ initialize()

virtual void Moose::LibtorchActionDistribution::initialize ( c10::optional< at::Generator >  generator = c10::nullopt)
pure virtual

Initialize the trainable distribution parameters.

Parameters
generatorOptional random-number generator used for reproducible initialization.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ isBounded()

virtual bool Moose::LibtorchActionDistribution::isBounded ( ) const
pure virtual

Tell callers whether the distribution enforces explicit action bounds.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ logProbability()

virtual torch::Tensor Moose::LibtorchActionDistribution::logProbability ( const torch::Tensor &  action) const
pure virtual

Evaluate the log-probability of an action under the current distribution.

Parameters
actionAction tensor in physical units.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ prepareAction()

torch::Tensor Moose::LibtorchActionDistribution::prepareAction ( const torch::Tensor &  action) const
protected

Convert actions to the configured device and scalar type.

Parameters
actionRaw action tensor.

Definition at line 92 of file LibtorchActionDistribution.C.

93{
94 auto scaled_action = action;
95 if (_data_type != scaled_action.scalar_type())
96 scaled_action = scaled_action.to(_data_type);
97 if (_device_type != scaled_action.device().type())
98 scaled_action = scaled_action.to(_device_type);
99 return scaled_action;
100}

Referenced by Moose::LibtorchGaussianActionDistribution::logProbability(), and Moose::LibtorchBetaActionDistribution::logProbability().

◆ prepareFeatures()

torch::Tensor Moose::LibtorchActionDistribution::prepareFeatures ( const torch::Tensor &  input) const
protected

Convert actor features to the configured device and scalar type.

Parameters
inputRaw actor feature tensor.

Definition at line 81 of file LibtorchActionDistribution.C.

82{
83 auto features = input;
84 if (_data_type != features.scalar_type())
85 features = features.to(_data_type);
86 if (_device_type != features.device().type())
87 features = features.to(_device_type);
88 return features;
89}

Referenced by Moose::LibtorchGaussianActionDistribution::reset(), and Moose::LibtorchBetaActionDistribution::reset().

◆ reset()

virtual void Moose::LibtorchActionDistribution::reset ( const torch::Tensor &  input)
pure virtual

Refresh cached distribution parameters from the latest actor features.

Parameters
inputFeature tensor coming from the actor body.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ sample()

virtual torch::Tensor Moose::LibtorchActionDistribution::sample ( c10::optional< at::Generator >  generator = c10::nullopt) const
pure virtual

Draw a stochastic action sample in physical units.

Parameters
generatorOptional random-number generator used for sampling.

Implemented in Moose::LibtorchGaussianActionDistribution, and Moose::LibtorchBetaActionDistribution.

◆ synchronizeScalingFactorsFromBuffer()

void Moose::LibtorchActionDistribution::synchronizeScalingFactorsFromBuffer ( )

Sync cached scaling metadata from the registered buffers after loading state.

Definition at line 73 of file LibtorchActionDistribution.C.

74{
75 auto action_scale =
76 _action_scale_tensor.detach().reshape({-1}).to(torch::kCPU).to(torch::kDouble);
78}
void tensorToVector(torch::Tensor &tensor, std::vector< DataType > &vector)

Referenced by Moose::loadLibtorchActorNeuralNetState().

Member Data Documentation

◆ _action_scale_tensor

torch::Tensor Moose::LibtorchActionDistribution::_action_scale_tensor
protected

Registered libtorch buffer holding the per-action scaling factors.

Definition at line 120 of file LibtorchActionDistribution.h.

Referenced by actionScaleTensor(), LibtorchActionDistribution(), and synchronizeScalingFactorsFromBuffer().

◆ _data_type

const torch::ScalarType Moose::LibtorchActionDistribution::_data_type
protected

◆ _device_type

const torch::DeviceType Moose::LibtorchActionDistribution::_device_type
protected

◆ _name

const std::string Moose::LibtorchActionDistribution::_name
protected

Module name used for registration and serialization.

Definition at line 107 of file LibtorchActionDistribution.h.

◆ _num_inputs

const unsigned int Moose::LibtorchActionDistribution::_num_inputs
protected

◆ _num_outputs

const unsigned int Moose::LibtorchActionDistribution::_num_outputs
protected

◆ _output_scaling_factors

std::vector<Real> Moose::LibtorchActionDistribution::_output_scaling_factors
protected

Cached per-action scaling factors applied in physical units.

Definition at line 117 of file LibtorchActionDistribution.h.

Referenced by LibtorchActionDistribution(), and synchronizeScalingFactorsFromBuffer().


The documentation for this class was generated from the following files: