https://mooseframework.inl.gov
Loading...
Searching...
No Matches
LibtorchActorNeuralNet.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://www.mooseframework.org
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#ifdef MOOSE_LIBTORCH_ENABLED
11
12#pragma once
13
14#include <torch/torch.h>
17
18namespace Moose
19{
20
25{
26public:
44 LibtorchActorNeuralNet(const std::string name,
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);
58
65 const bool build_on_construct = true);
66
71 virtual torch::Tensor forward(const torch::Tensor & x) override;
72
79 virtual torch::Tensor evaluate(torch::Tensor & input,
80 bool sampled,
81 c10::optional<at::Generator> generator = c10::nullopt);
82
87 virtual torch::Tensor sample(c10::optional<at::Generator> generator = c10::nullopt);
88
92 virtual void constructNeuralNetwork() override;
93
98
103
108
113
118
123
128
133
138
143
148
152 const std::vector<Real> & minValues() const { return _minimum_values; }
153
157 const std::vector<Real> & maxValues() const { return _maximum_values; }
158
163 void resetDistributionParams(torch::Tensor input);
164
169 torch::Tensor logProbability(const torch::Tensor & other);
170
174 torch::Tensor entropy();
175
180 virtual void
181 initializeNeuralNetwork(c10::optional<at::Generator> generator = c10::nullopt) override;
182
183protected:
185 const std::vector<Real> _minimum_values;
187 const std::vector<Real> _maximum_values;
191 std::shared_ptr<LibtorchActionDistribution> _action_distribution;
192};
193
199void to_json(nlohmann::json & json, const Moose::LibtorchActorNeuralNet * const & network);
200
207 const std::string & filename);
208
209}
210
217template <>
219 std::shared_ptr<Moose::LibtorchActorNeuralNet> & nn,
220 void * context);
221
228template <>
230 std::shared_ptr<Moose::LibtorchActorNeuralNet> & nn,
231 void * context);
232
233// This is needed because the reporter which is used to output the neural net parameters to JSON
234// requires a dataStore/dataLoad. However, these functions will be empty due to the fact that
235// we are only interested in the JSON output and we don't want to output everything
242template <>
245 void * context);
246
253template <>
256 void * context);
257
258#endif
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.