Skip to content

Conversation

@bdphilli
Copy link
Contributor

Add Gaussian Mixture Model (GMM) Support for Multi-Modal Uncertainty Quantification

Description

This PR introduces comprehensive support for Gaussian Mixture Model (GMM) variables to UQPCE, enabling uncertainty quantification for multi-modal distributions. This is particularly valuable for engineering applications where uncertain parameters may have multiple distinct modes (e.g., manufacturing tolerances, material properties with batch variations, or operational conditions with discrete states).

Key Features

New GaussianMixtureVariable Class

  • Full implementation of GMM distributions with arbitrary component mixtures
  • Automatic Gram-Schmidt orthogonalization for generating orthogonal polynomials
  • Optimized handling of standard normal case (single component with μ=0, σ=1)
  • Robust numerical integration with error checking

Core Capabilities

  • Orthogonal Polynomials: Custom Gram-Schmidt process for non-standard distributions
  • Sampling: Both random sampling and PCE-specific resampling methods
  • Standardization: Seamless transformation between original and standardized spaces
  • Integration: Stable numerical integration for computing inner products

Example & Documentation

Complete working example demonstrating robust optimization with GMM uncertainties:

  • Comparison of deterministic vs robust design optimization
  • Sampling verification script
  • Full UQPCE configuration example

Changes

Modified Files

  • uqpce/pce/enums.py - Added GAUSSIAN_MIXTURE distribution type
  • uqpce/pce/pce.py - Added GMM support in PCE initialization
  • uqpce/pce/variables/continuous.py - Added GaussianMixtureVariable class
  • uqpce/test_suite/test_uqpce/test_continuous_variables.py - Added GMM tests, removed debug method

New Files

  • uqpce/examples/GMM/GMM_Test.py - Optimization example
  • uqpce/examples/GMM/sample_verify.py - Sampling verification
  • uqpce/examples/GMM/input.yaml - Configuration example
  • uqpce/examples/GMM/run_matrix.dat - Sample matrix

Example Usage

# In input.yaml
Variable 0:
  name: bimodal_param
  distribution: gaussian_mixture
  weights: [0.3, 0.7]
  means: [-2.0, 1.0]
  stdevs: [0.5, 0.3]
  type: aleatory

# In Python
from uqpce.pce.variables.continuous import GaussianMixtureVariable

gmm = GaussianMixtureVariable(
    weights=[0.3, 0.7],
    means=[-2.0, 1.0],
    stdevs=[0.5, 0.3],
    order=3,
    name='bimodal_param'
)

…sampled values directly from UQPCE, updated graphics
This debug method was outside of any test class and contained extensive
print statements. It was not being run by unittest and was only used
for development debugging of GMM orthogonality.
Copy link
Contributor

@jnschmid jnschmid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gaussian Mixture Model variable and tests were created. Corresponding enums.py/pce.py changes were made to support the variable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants