https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
LibtorchObservationHistoryHelper Class Reference

Shared observation history stacking and factor-expansion logic for libtorch-based controls and trainers. More...

#include <LibtorchObservationHistoryHelper.h>

Public Member Functions

 LibtorchObservationHistoryHelper (unsigned int input_timesteps)
 Build an observation-history helper for libtorch inputs.
 
unsigned int inputTimesteps () const
 Return the number of timesteps stacked into each flattened input.
 
void initializeHistory (const std::vector< Real > &observation, std::vector< std::vector< Real > > &old_observations) const
 Fill the history buffer with copies of the current observation.
 
void advanceHistory (const std::vector< Real > &observation, std::vector< std::vector< Real > > &old_observations) const
 Advance the history buffer by inserting the latest observation.
 
std::vector< Real > expandObservationFactors (const std::vector< Real > &observation_factors) const
 Repeat per-observation-entry factors across all stacked timesteps.
 
std::vector< Real > stackCurrentObservation (const std::vector< Real > &observation, const std::vector< std::vector< Real > > &old_observations) const
 Flatten the current observation together with its stored history.
 
std::vector< Real > stackTrajectoryObservation (const std::vector< std::vector< Real > > &component_trajectories, unsigned int time_index) const
 Flatten one time slice of observation-component trajectories with causal history.
 

Private Member Functions

void validateTrajectoryShape (const std::vector< std::vector< Real > > &component_trajectories) const
 Check that all observation-component trajectories have a consistent shape.
 

Private Attributes

const unsigned int _input_timesteps
 Number of timesteps stacked into each flattened observation.
 

Detailed Description

Shared observation history stacking and factor-expansion logic for libtorch-based controls and trainers.

Definition at line 22 of file LibtorchObservationHistoryHelper.h.

Constructor & Destructor Documentation

◆ LibtorchObservationHistoryHelper()

LibtorchObservationHistoryHelper::LibtorchObservationHistoryHelper ( unsigned int  input_timesteps)

Build an observation-history helper for libtorch inputs.

Parameters
input_timestepsNumber of timesteps to stack into each flattened input.

Definition at line 19 of file LibtorchObservationHistoryHelper.C.

21 : _input_timesteps(input_timesteps)
22{
23 if (_input_timesteps == 0)
24 mooseError("Observation history requires at least one input timestep.");
25}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
const unsigned int _input_timesteps
Number of timesteps stacked into each flattened observation.

Member Function Documentation

◆ advanceHistory()

void LibtorchObservationHistoryHelper::advanceHistory ( const std::vector< Real > &  observation,
std::vector< std::vector< Real > > &  old_observations 
) const

Advance the history buffer by inserting the latest observation.

Parameters
observationCurrent observation.
old_observationsHistory buffer ordered from newest to oldest.

Definition at line 48 of file LibtorchObservationHistoryHelper.C.

50{
51 if (old_observations.empty())
52 return;
53
54 std::rotate(old_observations.rbegin(), old_observations.rbegin() + 1, old_observations.rend());
55 old_observations[0] = observation;
56}

Referenced by LibtorchNeuralNetControl::execute().

◆ expandObservationFactors()

std::vector< Real > LibtorchObservationHistoryHelper::expandObservationFactors ( const std::vector< Real > &  observation_factors) const

Repeat per-observation-entry factors across all stacked timesteps.

Parameters
observation_factorsPer-entry factors for one observation vector.

Definition at line 59 of file LibtorchObservationHistoryHelper.C.

61{
62 if (observation_factors.empty())
63 return {};
64
65 std::vector<Real> expanded;
66 expanded.reserve(observation_factors.size() * _input_timesteps);
67
68 for (const auto lag : make_range(_input_timesteps))
69 {
70 libmesh_ignore(lag);
71 expanded.insert(expanded.end(), observation_factors.begin(), observation_factors.end());
72 }
73
74 return expanded;
75}
void libmesh_ignore(const Args &...)
IntRange< T > make_range(T beg, T end)

Referenced by LibtorchNeuralNetControl::loadControlNeuralNetFromFile(), and LibtorchNeuralNetControl::prepareInputTensor().

◆ initializeHistory()

void LibtorchObservationHistoryHelper::initializeHistory ( const std::vector< Real > &  observation,
std::vector< std::vector< Real > > &  old_observations 
) const

Fill the history buffer with copies of the current observation.

Parameters
observationCurrent observation.
old_observationsHistory buffer that stores previous observations.

Definition at line 41 of file LibtorchObservationHistoryHelper.C.

43{
44 old_observations.assign(_input_timesteps - 1, observation);
45}

Referenced by LibtorchNeuralNetControl::execute().

◆ inputTimesteps()

unsigned int LibtorchObservationHistoryHelper::inputTimesteps ( ) const
inline

Return the number of timesteps stacked into each flattened input.

Definition at line 34 of file LibtorchObservationHistoryHelper.h.

34{ return _input_timesteps; }

◆ stackCurrentObservation()

std::vector< Real > LibtorchObservationHistoryHelper::stackCurrentObservation ( const std::vector< Real > &  observation,
const std::vector< std::vector< Real > > &  old_observations 
) const

Flatten the current observation together with its stored history.

Parameters
observationCurrent observation.
old_observationsHistory buffer ordered from newest to oldest.

Definition at line 78 of file LibtorchObservationHistoryHelper.C.

81{
82 const auto expected_history_size = _input_timesteps - 1;
83 if (old_observations.size() != expected_history_size)
84 mooseError("Observation history must contain ",
85 expected_history_size,
86 " stored entries, but got ",
87 old_observations.size(),
88 ".");
89
90 std::vector<Real> stacked;
91 stacked.reserve(observation.size() * _input_timesteps);
92
93 stacked.insert(stacked.end(), observation.begin(), observation.end());
94
95 for (const auto & history_entry : old_observations)
96 {
97 if (history_entry.size() != observation.size())
98 mooseError("Observation history entries must have the same size as the current "
99 "observation.");
100 stacked.insert(stacked.end(), history_entry.begin(), history_entry.end());
101 }
102
103 return stacked;
104}

Referenced by LibtorchNeuralNetControl::prepareInputTensor().

◆ stackTrajectoryObservation()

std::vector< Real > LibtorchObservationHistoryHelper::stackTrajectoryObservation ( const std::vector< std::vector< Real > > &  component_trajectories,
unsigned int  time_index 
) const

Flatten one time slice of observation-component trajectories with causal history.

This uses [component][time] because the trainer receives reporter data one observation component at a time, so keeping that layout avoids building an extra transposed [time][component] container before stacking.

Parameters
component_trajectoriesObservation trajectories indexed as [component][time].
time_indexTime index to stack.

Definition at line 107 of file LibtorchObservationHistoryHelper.C.

110{
111 validateTrajectoryShape(component_trajectories);
112
113 if (component_trajectories.empty())
114 return {};
115
116 const auto trajectory_size = component_trajectories.front().size();
117 if (time_index >= trajectory_size)
118 mooseError("Requested observation time index is out of range.");
119
120 std::vector<Real> stacked;
121 stacked.reserve(component_trajectories.size() * _input_timesteps);
122
123 for (const auto lag : make_range(_input_timesteps))
124 {
125 const auto source_index = time_index > lag ? time_index - lag : 0;
126 for (const auto component_i : make_range(component_trajectories.size()))
127 stacked.push_back(component_trajectories[component_i][source_index]);
128 }
129
130 return stacked;
131}
void validateTrajectoryShape(const std::vector< std::vector< Real > > &component_trajectories) const
Check that all observation-component trajectories have a consistent shape.

◆ validateTrajectoryShape()

void LibtorchObservationHistoryHelper::validateTrajectoryShape ( const std::vector< std::vector< Real > > &  component_trajectories) const
private

Check that all observation-component trajectories have a consistent shape.

Definition at line 28 of file LibtorchObservationHistoryHelper.C.

30{
31 if (component_trajectories.empty())
32 return;
33
34 const auto trajectory_size = component_trajectories.front().size();
35 for (const auto & trajectory : component_trajectories)
36 if (trajectory.size() != trajectory_size)
37 mooseError("Observation trajectories must all have the same number of timesteps.");
38}
if(!dmm->_nl) SETERRQ(PETSC_COMM_WORLD

Referenced by stackTrajectoryObservation().

Member Data Documentation

◆ _input_timesteps

const unsigned int LibtorchObservationHistoryHelper::_input_timesteps
private

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