10#ifdef MOOSE_LIBTORCH_ENABLED
14#include <torch/torch.h>
45 const unsigned int num_inputs,
46 const unsigned int num_outputs,
47 const std::vector<unsigned int> & num_neurons_per_layer,
48 const std::vector<std::string> & activation_function = {
"relu"},
49 const std::vector<Real> & minimum_values = {},
50 const std::vector<Real> & maximum_values = {},
51 const torch::DeviceType device_type = torch::kCPU,
52 const torch::ScalarType scalar_type = torch::kDouble,
53 const bool build_on_construct =
true,
54 const std::vector<Real> & input_shift_factors = {},
55 const std::vector<Real> & input_scaling_factors = {},
56 const std::vector<Real> & output_scaling_factors = {},
57 const bool state_independent_std =
true);
65 const bool build_on_construct =
true);
71 virtual torch::Tensor
forward(
const torch::Tensor &
x)
override;
79 virtual torch::Tensor
evaluate(torch::Tensor & input,
81 c10::optional<at::Generator> generator = c10::nullopt);
87 virtual torch::Tensor
sample(c10::optional<at::Generator> generator = c10::nullopt);
207 const std::string & filename);
219 std::shared_ptr<Moose::LibtorchActorNeuralNet> & nn,
230 std::shared_ptr<Moose::LibtorchActorNeuralNet> & nn,
const std::vector< double > x
void dataStore< Moose::LibtorchActorNeuralNet const >(std::ostream &stream, Moose::LibtorchActorNeuralNet const *&nn, void *context)
Placeholder serializer for reporter-only actor pointers.
void dataLoad< Moose::LibtorchActorNeuralNet const >(std::istream &stream, Moose::LibtorchActorNeuralNet const *&nn, void *context)
Placeholder deserializer for reporter-only actor pointers.
void dataLoad< Moose::LibtorchActorNeuralNet >(std::istream &stream, std::shared_ptr< Moose::LibtorchActorNeuralNet > &nn, void *context)
Deserialize the actor-network metadata needed for restart.
void dataStore< Moose::LibtorchActorNeuralNet >(std::ostream &stream, std::shared_ptr< Moose::LibtorchActorNeuralNet > &nn, void *context)
Serialize the actor-network metadata needed for restart.
Reusable continuous-action distribution interface for actor policies.
Feed-forward actor network coupled to a Gaussian or Beta action distribution.
virtual torch::Tensor sample(c10::optional< at::Generator > generator=c10::nullopt)
Sample an action from the already-reset distribution.
const std::vector< Real > _maximum_values
Upper action bounds used by bounded actor distributions.
const LibtorchGaussianActionDistribution * gaussianActionDistributionPtr() const
Return the Gaussian action distribution pointer, or nullptr for bounded actors.
virtual void constructNeuralNetwork() override
Construct the actor body and action-distribution modules.
const LibtorchGaussianActionDistribution & gaussianActionDistribution() const
Return the Gaussian action distribution reference.
virtual torch::Tensor forward(const torch::Tensor &x) override
Run a forward pass through the actor body.
virtual void initializeNeuralNetwork(c10::optional< at::Generator > generator=c10::nullopt) override
Initialize the actor body and action-distribution parameters.
const std::vector< Real > _minimum_values
Lower action bounds used by bounded actor distributions.
bool stateIndependentStd() const
Return whether the Gaussian standard deviation ignores the current actor features.
std::shared_ptr< LibtorchActionDistribution > _action_distribution
Action-distribution module attached to the actor output.
const LibtorchBetaActionDistribution * betaActionDistributionPtr() const
Return the Beta action distribution pointer, or nullptr for Gaussian actors.
const std::vector< Real > & minValues() const
Return the configured lower action bounds.
torch::Tensor logProbability(const torch::Tensor &other)
Evaluate the log-probability of an action under the current actor state.
const std::vector< Real > & maxValues() const
Return the configured upper action bounds.
const LibtorchBetaActionDistribution & betaActionDistribution() const
Return the Beta action distribution reference.
virtual torch::Tensor evaluate(torch::Tensor &input, bool sampled, c10::optional< at::Generator > generator=c10::nullopt)
Evaluate the actor and either sample from it or use its deterministic action.
const bool _state_independent_std
Whether the Gaussian std ignores the current actor features.
torch::Tensor entropy()
Compute the entropy of the current action distribution.
LibtorchActionDistribution & actionDistribution()
Return the active action distribution as the common base type.
const LibtorchActionDistribution & actionDistribution() const
Return the active action distribution as the common base type.
void resetDistributionParams(torch::Tensor input)
Refresh the cached distribution parameters from a fresh input tensor.
const std::string & name() const
Beta action distribution for bounded action spaces.
Gaussian action distribution for unbounded action spaces.
void to_json(nlohmann::json &json, const Moose::LibtorchArtificialNeuralNet *const &network)
void loadLibtorchActorNeuralNetState(Moose::LibtorchActorNeuralNet &nn, const std::string &filename)
Load an actor checkpoint written as a native libtorch state archive.