Skip to main content
Paper·arxiv.org
machine-learningresearchautomationinfrastructureai-agents

Graph Neural ODE Digital Twins for Control-Oriented Reactor Thermal-Hydraulic Forecasting Under Partial Observability

Build Graph Neural ODE (GNO-DE) digital twins to accurately forecast complex thermal-hydraulic states in nuclear reactors. This enables real-time supervisory control by predicting plant-wide dynamics, even under partial sensor observability.

advanced3 weeks6 steps
The play
  1. Grasp GNN & NODE Fundamentals
    Understand how Graph Neural Networks capture spatial dependencies and Neural Ordinary Differential Equations model continuous temporal dynamics for dynamic systems.
  2. Graphify Reactor Topology
    Represent the reactor's thermal-hydraulic system as a graph. Define nodes (e.g., sensor locations, fluid volumes) and edges (e.g., heat transfer paths, fluid flow connections) based on physical layout.
  3. Design GNO-DE Architecture
    Construct a model combining GNN layers to process graph-structured data with NODE blocks to learn continuous time-series evolution of node states, forming the core of the digital twin.
  4. Address Partial Observability
    Integrate techniques (e.g., latent variable models, graph imputation, attention mechanisms) within the GNO-DE framework to effectively infer and predict states in unmonitored or partially observed regions.
  5. Train & Validate Digital Twin
    Train the GNO-DE model using high-fidelity simulation data or operational data. Optimize for predictive accuracy, robustness, and generalization in forecasting critical thermal-hydraulic parameters.
  6. Optimize for Real-time Inference
    Fine-tune the trained model for millisecond-scale prediction speed. Ensure it meets the stringent latency requirements necessary for real-time supervisory control and decision-making in safety-critical environments.
Starter code
import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv
from torchdiffeq import odeint_adjoint as odeint

class ODEFunc(nn.Module):
    def __init__(self, hidden_dim):
        super(ODEFunc, self).__init__()
        self.net = nn.Sequential(
            nn.Linear(hidden_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, hidden_dim)
        )

    def forward(self, t, x):
        return self.net(x)

class GNODELayer(nn.Module):
    def __init__(self, input_dim, hidden_dim, ode_solver_method='dopri5'):
        super(GNODELayer, self).__init__()
        self.gcn = GCNConv(input_dim, hidden_dim)
        self.ode_func = ODEFunc(hidden_dim)
        self.ode_solver_method = ode_solver_method

    def forward(self, x, edge_index, t_span):
        h_spatial = self.gcn(x, edge_index)
        solution = odeint(self.ode_func, h_spatial, t_span, method=self.ode_solver_method)
        return solution[-1] # Return the final state
Source
Graph Neural ODE Digital Twins for Control-Oriented Reactor Thermal-Hydraulic Forecasting Under Partial Observability — Action Pack