Physics-informed Polynomial Chaos Expansion
Polynomial chaos expansion can be used in physics-informed machine learning as an efficient surrogate model allowing for analytical uncertainty quantification. The PCE constrained to adhere to the known physics of the model (referenced as (PC \(^2\)), combines the conventional experimental design with additional constraints from the physics of the model. The constraints are represented by set of differential equations and specified boundary conditions. PC \(^2\) framework implemented in UQPy consists of three classes.
PdeData class
The first class PdeData
contains general physical information (geometry, boundary conditions) describing the
governing differential equation. It is imported using the following command:
>>> from UQpy.surrogates.polynomial_chaos.physics_informed.PdeData import PdeData
- class PdeData(upper_bounds, lower_bounds, derivative_orders, boundary_normals, boundary_coordinates, boundary_values)[source]
Class containing information about PDE solved by Physics-informed PCE
- Parameters:
upper_bounds (
list
) – list of upper bounds of deterministic variables (geometry and time)lower_bounds (
list
) – list of lower bounds of deterministic variables (geometry and time)derivative_orders (
list
) – list of derivative orders of boundary conditionsboundary_normals (
list
) – normals of boundary conditionsboundary_coordinates (
list
) – coordinates of boundary samplesboundary_values (
list
) – prescribed values of boundary conditions in bc_x
PdePce class
The second class in the PC \(^2\) framework is PdePCE
containing PDE physical data and definitions of PDE
in PCE context. The class is imported using the following command:
>>> from UQpy.surrogates.polynomial_chaos.physics_informed.PdePCE import PdePCE
- class PdePCE(pde_data, pde_basis, pde_source=None, boundary_conditions_evaluate=None, boundary_conditions_sampling=None, virtual_points_sampling=None, nonlinear=False)[source]
Class containing information about PDE needed for physics-informed PCE
- Parameters:
pde_basis (
Callable
) – pde defined in basis functionsboundary_conditions_evaluate (
Optional
[Callable
]) – evaluation of boundary conditions for estimation of an errorboundary_conditions_sampling (
Optional
[Callable
]) – function for sampling of boundary conditionsvirtual_points_sampling (
Optional
[Callable
]) – function for sampling of virtual samplesnonlinear (
bool
) – if True, prescribed pde is non-linear
ConstrainedPCE class
Finally, a numerical solvers based on Karush-Kuhn-Tucker normal equations are defined in the ConstrainedPCE
imported using the following command:
>>> from UQpy.surrogates.polynomial_chaos.physics_informed.ConstrainedPCE import ConstrainedPCE
- class ConstrainedPCE(pde_data, pde_pce, pce)[source]
Class for construction of physics-informed PCE using Karush-Kuhn-Tucker normal equations
- Parameters:
pde_data (
PdeData
) – an object of theUQpy()
PdeData
classpde_pce (
PdePCE
) – an object of theUQpy()
PdePce
classpce (
PolynomialChaosExpansion
) – initial pce, an object of theUQpy()
PolynomialChaosExpansion
class
- estimate_error(pce, standardized_sample)[source]
Estimate an error of the physics-informed PCE consisting of three parts: prediction errors in training data, errors in boundary conditions and violations of given PDE. Total error is sum of individual mean squared errors.
- Parameters:
pce (
PolynomialChaosExpansion
) – initial pce, an object of theUQpy()
PolynomialChaosExpansion
classstandardized_sample (
ndarray
) – virtual samples in standardized space for evaluation of errors in PDE
- Returns:
estimated total mean squared error
- lar(n_error_points=50, virtual_niters=False, max_iterations=None, no_iterations=False, min_basis_functions=1, nvirtual=-1, target_error=0)[source]
Fit the sparse physics-informed PCE by Least Angle Regression from Karush-Kuhn-Tucker normal equations
- Parameters:
n_error_points (
int
) – number of virtual samples used for estimation of an errorvirtual_niters (
bool
) – if True, minimum number of basis functions is equal to number of BCsmax_iterations (
Optional
[int
]) – maximum number of iterations for construction of LAR Pathno_iterations (
bool
) – use all obtained basis functions in the first step, i.e. no iterationsmin_basis_functions (
int
) – minimum number of basis functions for starting the iterative processnvirtual (
int
) – set number of virtual points, -1 corresponds to the optimal numbertarget_error (
float
) – target error of iterative process
- ols(pce=None, nvirtual=-1, calculate_coefficients=True, return_coefficients=True, n_error_points=100)[source]
Fit the sparse physics-informed PCE by ordinary least squares from Karush-Kuhn-Tucker normal equations
- Parameters:
pce (
Optional
[PolynomialChaosExpansion
]) – an object of thePolynomialChaosExpansion
classnvirtual (
int
) – set number of virtual points, -1 corresponds to the optimal numbercalculate_coefficients (
bool
) – if True, estimate deterministic coefficients. Othewise, construct only KKT normal equations for sparse solversreturn_coefficients (
bool
) – if True, return coefficients of pcen_error_points (
int
) – number of virtual samples used for estimation of an error
ReducedPCE Class
Once the PC \(^2\) is created, it can be easily exploited for UQ as standard PCE. However, since differential
equations are typically defined in physical space and thus the PCE contains also deterministic space-time variables.
Their influence can be filtered out by the ReducedPCE
class.
The ReducedPCE
class is imported using the following command:
>>> from UQpy.surrogates.polynomial_chaos.physics_informed.ReducedPCE import ReducedPCE
- class ReducedPCE(pce, n_deterministic, deterministic_positions=None)[source]
Class to create a reduced PCE filtering out deterministic input variables (e.g. geometry)
- Parameters:
pce (
PolynomialChaosExpansion
) – an object of theUQpy()
PolynomialChaosExpansion
classn_deterministic (
int
) – number of deterministic input variablesdeterministic_positions (
Optional
[list
]) – list of positions of deterministic random variables in input vector. If None, positions are assumed to be the first n_det variables.
- evaluate_coordinate(coordinates, return_coefficients=False)[source]
Evaluate reduced PCE coefficients for given deterministic coordinates.
- derive_coordinate(coordinates, derivative_order, leading_variable, derivative_multiplier=1, return_coefficients=False)[source]
Evaluate derivative of reduced PCE coefficients for given deterministic coordinates.
- Parameters:
coordinates (
ndarray
) – deterministic coordinates for evaluation of reduced PCEderivative_order (
int
) – derivation order of reduced PCEleading_variable (
int
) – leading variable for derivationderivative_multiplier (
float
) – multiplier reflecting different sizes of the original physical and transformed spacesreturn_coefficients (
bool
) – if True, return a vector of deterministic coefficients, else return Mean and Variance
- Returns:
mean and variance, or a vector of deterministic coefficients if return_coeff
- variance_contributions(unique_beta)[source]
Get first order conditional variances from coefficients of reduced PCE evaluated in the specified deterministic physical coordinates
- Parameters:
unique_beta (
ndarray
) – vector of reduced PCE coefficients- Returns:
first order conditional variances associated to each input random variable