Reading Time: 10 minutes

Necesita saber dos cosas diferentes sobre una simulación: si el código resuelve las ecuaciones correctamente y si el modelo es lo suficientemente preciso para el problema del mundo real. La primera pregunta es la verificación. La segunda pregunta es la validación.

Pero eso no es suficiente. También debe comprender cuánto puede confiar en los números que produce su simulación. Ahí es donde la cuantificación de incertidumbre entra en el flujo de trabajo.

Esta guía explica el marco VVUQ completo: verificación, validación y cuantificación de incertidumbre. También incluye ejemplos prácticos de Python y Fipy que pueden ayudarlo a aplicar estas ideas en su propio trabajo de simulación.

Comida clave

  • La verificación responde a la pregunta: ¿Resolvimos bien las ecuaciones? Comprueba la corrección del código, la precisión numérica y los errores de implementación.
  • La validación responde a la pregunta: ¿Resolvimos las ecuaciones correctas? Compara la salida de simulación con datos experimentales, datos de referencia o resultados de referencia confiables.
  • La cuantificación de la incertidumbre responde a la pregunta: ¿Cuánto podemos confiar en estos resultados? Propaga incertidumbres de entrada a través del modelo e informa límites de confianza en las predicciones.
  • UQ a menudo se menciona en las discusiones de V&V, pero rara vez se implementa con ejemplos prácticos de Python. Esta guía da puntos de partida concretos.
  • La cartera de estándares ASME VVUQ proporciona una estructura ampliamente adoptada para los flujos de trabajo de VVUQ en todas las disciplinas computacionales.

Verificación, validación y cuantificación de la incertidumbre: por qué pertenecen juntos

Si alguna vez ha ejecutado una simulación y le preguntó si puede confiar en los resultados, ya se encontró con el problema que aborda VVUQ.

La verificación, la validación y la cuantificación de la incertidumbre no son tareas separadas que complete de forma independiente. Forman una canalización de credibilidad:

  1. La verificación demuestra que el código es matemática y computacionalmente correcto.
  2. La validación comprueba si el modelo representa el sistema real lo suficientemente bien para el uso previsto.
  3. La cuantificación de la incertidumbre te dice qué tan seguro puedes estar en las predicciones.

El marco ASME VVUQ formaliza esta canalización en un flujo de trabajo estructurado que se utiliza en mecánica de sólidos computacional, dinámica de fluidos, dispositivos médicos y otros campos pesados de simulación. asme vvuq

La distinción entre verificación y validación a menudo se resume a través de dos preguntas.

Pregunta Lo que significa lo que estás comprobando
¿Estamos resolviendo bien las ecuaciones? Verificación Errores de codificación, errores numéricos y errores de discretización
¿Estamos resolviendo las ecuaciones correctas? Validación Precisión del modelo físico, condiciones de contorno y suposiciones

La tercera pregunta es: ¿Qué tan seguros podemos tener? Ahí es donde la cuantificación de la incertidumbre entra en el proceso.

Una simulación se puede verificar y validar, pero aún así producir predicciones con amplios intervalos de incertidumbre. Si esos intervalos son demasiado amplios, es posible que el resultado no sea útil para el diseño, la regulación o la toma de decisiones.

1. Verificación: Demostrar que su código es correcto

La verificación es matemática y computacional. No prueba el mundo real directamente. En cambio, asume que las ecuaciones de gobierno son correctas y pregunta si el programa informático las resuelve sin errores numéricos o de implementación.

Hay dos aspectos principales de la verificación: verificación de código y orden de prueba de precisión.

Verificación de código: ¿La implementación coincidió con las matemáticas?

La verificación de código demuestra que el solucionador implementa correctamente el modelo matemático. Dos métodos ampliamente utilizados son el método de soluciones fabricadas y el orden de las pruebas de precisión.

Método de soluciones manufacturadas

El método de soluciones manufacturadas es una de las herramientas más sólidas para la verificación de código en la ciencia computacional. Funciona creando una solución analítica conocida, calculando el término fuente requerido y luego verificando si el código reproduce esa solución.

El procedimiento es:

  1. Elija una solución analítica suave, como u_m = sin(x) * cos(y) * exp(-t).
  2. Sustituya la solución manufacturada en el operador de PDE para calcular el término fuente requerido.
  3. Ejecute la simulación con el término fuente manufacturado y el límite o las condiciones iniciales coincidentes.
  4. Compare la solución numérica con la solución fabricada exacta.
  5. Ejecute estudios de refinamiento de malla para verificar que el orden de convergencia observado coincida con el orden teórico.

Aquí hay un ejemplo simplificado de estilo fipy para un problema de difusión transitoria:

import numpy as np
from fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm

# Manufactured solution:
# u(x, y, t) = sin(pi*x) * sin(pi*y) * exp(-2*pi^2*t)

nx, ny = 32, 32
Lx, Ly = 1.0, 1.0

dx = Lx / nx
dy = Ly / ny

mesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)

x, y = mesh.cellCenters

u = CellVariable(name="u", mesh=mesh, hasOld=True)

def exact_solution(t):
    return np.sin(np.pi * x) * np.sin(np.pi * y) * np.exp(-2 * np.pi**2 * t)

# Initial condition
u.setValue(exact_solution(0.0))

# For this manufactured solution and diffusion coefficient 1:
# du/dt = Laplacian(u), so the source term is zero.
source = CellVariable(name="source", mesh=mesh, value=0.0)

eq = TransientTerm(var=u) == DiffusionTerm(coeff=1.0, var=u) + source

dt = 0.001
nt = 100

for step in range(nt):
    u.updateOld()
    eq.solve(var=u, dt=dt)

t_final = dt * nt
exact = exact_solution(t_final)

l2_error = np.sqrt(np.mean((u.value - exact) ** 2))

print(f"L2 error at t={t_final:.3f}: {l2_error:.6e}")

Si reduce a la mitad el tamaño de la malla y el error se reduce en aproximadamente un factor de cuatro, un esquema de segundo orden se está comportando como se esperaba. Si no lo hace, la implementación puede contener un error o el tratamiento de límites puede reducir el orden observado.

Orden de prueba de precisión

El orden de las pruebas de precisión verifica que el código alcance la tasa de convergencia esperada bajo el refinamiento de la malla.

Para un esquema de volumen finito de segundo orden, la reducción a la mitad del espaciado de malla debería reducir el error en aproximadamente un factor de cuatro.

El procedimiento es:

  1. Elija un problema con una solución exacta conocida, ya sea de MMS o de una referencia de libro de texto.
  2. Resuelva el problema en una secuencia de mallas refinadas, como 32×32, 64×64 y 128×128.
  3. Calcule una norma de error en cada nivel de refinamiento, como L1, L2 o L∞.
  4. Error de trazado frente al tamaño de la malla en un gráfico logarítmico.
  5. Calcule el orden observado con order = log(e_coarse / e_fine) / log(h_coarse / h_fine).
  6. Verifique que el orden observado coincida con el orden de discretización teórica dentro de una tolerancia razonable.

Este es un requisito mínimo para cualquier código PDE que reclame la corrección numérica. Sin él, las estimaciones de errores y las conclusiones de la convergencia de malla son débiles.

Advertencia importante sobre la comparación de códigos cruzados

La comparación de dos códigos diferentes puede ser útil como control de cordura, pero no sustituye a la verificación frente a soluciones analíticas o manufacturadas.

Dos códigos pueden estar de acuerdo y seguir siendo erróneos si ambos comparten el mismo error sistemático. La comparación de códigos cruzados debe utilizarse como una verificación suplementaria después de una prueba de pedido o MMS adecuada.

2. Validación: comparar simulaciones con la realidad

La validación evalúa si el modelo de simulación es lo suficientemente preciso para su uso previsto. Lo hace comparando predicciones con datos experimentales independientes, datos de referencia o resultados de referencia confiables.

Una regla clave es que la calibración y la validación deben estar separadas. Calibration adjusts model parameters to match data. La validación prueba el poder predictivo de los datos independientes. El uso del mismo conjunto de datos para ambos crea confianza artificial.

Problemas de referencia como objetivos de validación

Los problemas de referencia son casos de prueba estandarizados con datos de referencia experimentales o de alta fidelidad bien caracterizados. Proporcionan objetivos de validación objetiva.

Las categorías comunes de referencia incluyen:

  • Dinámica de fluidos, como el flujo más allá de un cilindro o flujo de cavidad impulsado por la tapa.
  • Ecuaciones de transporte, como la advección-difusión 1D con un comportamiento analítico conocido.
  • Los modelos de campo de fase, como los patrones de Allen-Cahn o Cahn-Hilliard en comparación con el comportamiento de referencia.
  • Sistemas de reacción de difusión, como la validación de la velocidad de la onda Fisher-Kpp.

Para el modelado de materiales computacionales y el aprendizaje automático basado en PDE, los conjuntos de datos de referencia como pdebench pueden proporcionar problemas de referencia estandarizados.

Cuando los datos experimentales no están disponibles

Los datos experimentales de alta calidad no siempre están disponibles. En ese caso, aún puede crear evidencia de validación utilizando las mejores alternativas disponibles.

  1. Utilice soluciones de referencia de alta fidelidad, como DNS para flujos turbulentos, cuando estén disponibles.
  2. Comparar con soluciones analíticas para casos simplificados.
  3. Realice comparaciones de códigos cruzados con códigos independientes y bien verificados.
  4. Sea transparente sobre la limitación y caracterice la incertidumbre predictiva a través del análisis de sensibilidad.

Estrategia de validación jerárquica

Una estrategia de validación práctica debe ser jerárquica.

  1. Comience con problemas de referencia simples que aíslen la física específica.
  2. Construya la complejidad a través de pruebas a nivel de sistema que combinan varios fenómenos.
  3. Documente los problemas de validación, los resultados, las métricas de error y las conclusiones sobre la adecuación para el uso previsto.

Un modelo rara vez se valida perfectamente. Se valida con un cierto nivel de precisión para un uso previsto específico.

3. Cuantificación de la incertidumbre: medir la confianza en las predicciones

La cuantificación de la incertidumbre es el proceso de caracterizar, cuantificar y propagar las incertidumbres en las entradas, parámetros y aproximaciones del modelo. Ayuda a evaluar cómo la incertidumbre afecta los resultados del modelo y la confianza en la predicción.

Ningún modelo es perfecto, y todo sistema real incluye variabilidad y conocimiento incompleto. UQ te ayuda a entender no solo lo que predice el modelo, sino también qué tan seguro es esa predicción.

Tipos de incertidumbre

UQ distingue dos categorías principales de incertidumbre.

Tipo Lo que significa se puede reducir? ejemplos
Aleatorio Aleatoriedad inherente en un sistema No, es irreductible Tolerancias de fabricación y fluctuaciones ambientales
epistémico Falta de conocimiento sobre el sistema Sí, a través de más datos o mejores modelos Propiedades materiales desconocidas y condiciones iniciales no medidas

Esta distinción importa porque afecta la elección del método UQ. La incertidumbre aleatoria generalmente se describe con distribuciones de probabilidad. La incertidumbre epistémica a menudo se puede reducir a través de más mediciones, mejores modelos o una calibración mejorada.

Métodos UQ: de simple a avanzado

Simulación Monte Carlo

La simulación de Monte Carlo es el método UQ más sencillo. Ejecuta repetidamente el modelo con valores de entrada muestreados aleatoriamente extraídos de distribuciones definidas. El resultado es una distribución de los valores de salida.

import numpy as np

# Example: propagate uncertainty in thermal conductivity.
# Assume k = 200 W/mK +/- 10%, represented as a uniform distribution.
k_samples = np.random.uniform(180, 220, size=10000)

# Simplified steady-state heat transfer:
# T = q * L / (k * A)
q = 1000
L = 0.01
A = 1.0

T = (q * L) / (k_samples * A)

print(f"Mean temperature: {np.mean(T):.2f} K")
print(
    "95% confidence interval: "
    f"[{np.percentile(T, 2.5):.2f}, {np.percentile(T, 97.5):.2f}] K"
)

Monte Carlo es fácil de entender e implementar. Su principal inconveniente es el costo. Si cada ejecución de modelo es costosa, es posible que miles de muestras no sean prácticas.

Ampliación del caos polinómico

La expansión del caos polinómico construye un modelo sustituto que representa la salida como función polinomial de entradas inciertas. Puede ser mucho más eficiente que Monte Carlo de fuerza bruta cuando cada ejecución de simulación es costosa.

Las herramientas de Python, como EasyVVUQ y EasySurrogate, pueden soportar el caos polinomial y los flujos de trabajo de UQ basados en sustitutos.

Análisis de sensibilidad

El análisis de sensibilidad investiga cómo la variación en la salida del modelo se puede atribuir a la variación en las entradas del modelo. Ayuda a identificar qué parámetros influyen más en las predicciones.

Dos categorías principales son:

  • Análisis de sensibilidad local. Esto cambia una entrada a la vez mientras mantiene a otros fijos. Es simple pero no captura las interacciones de los parámetros.
  • Análisis de sensibilidad global. Esto varía todas las entradas juntas y puede dar cuenta de las interacciones. Los métodos incluyen índices SOBOL, métodos basados en regresión y métodos basados en derivados.

El análisis de sensibilidad es útil para:

  1. Priorizando la recopilación de datos identificando qué parámetros son más importantes.
  2. Simplificando modelos mediante la fijación de parámetros que tienen un impacto insignificante.
  3. comprender qué mecanismos impulsan las predicciones.

La tubería VVUQ integrada: Poniéndolo todo junto

Una canalización integrada de VVUQ sigue un flujo de trabajo sistemático.

  1. Identificar y caracterizar las incertidumbres en las entradas, los parámetros físicos y las aproximaciones numéricas.
  2. Realice la verificación de código y solución para reducir los errores numéricos, los errores de codificación y la incertidumbre de discretización.
  3. Propague las incertidumbres de entrada a través del modelo computacional para generar distribuciones de salida.
  4. Valide las predicciones del modelo contra datos experimentales controlados o resultados de referencia de confianza.
  5. Apoyar la toma de decisiones con resultados probabilísticos, basados en riesgos en lugar de predicciones deterministas únicas.

En la práctica, este flujo de trabajo puede ser compatible con herramientas como EasyVVUQ, FABSIM3, bibliotecas de modelado sustituto y sistemas de flujo de trabajo orientados a HPC.

Errores comunes de V&V y cómo evitarlos

Errores de verificación

  • Suponiendo que el código esté libre de errores. Incluso los códigos ampliamente utilizados pueden contener errores no detectados. Las pruebas de regresión con casos MMS pueden detectar nuevos errores.
  • descuidando la precisión del pedido. Sin confirmar las tasas de convergencia teóricas, las estimaciones de error son débiles.
  • Usando la comparación de códigos cruzados como el único método de verificación. Dos códigos incorrectos pueden estar de acuerdo.
  • Tratar la verificación como una actividad única. Cada cambio de código significativo debería desencadenar una reverificación relevante.

Errores de validación

  • Calibración confusa con validación. Sintonizar parámetros a los datos y luego validar contra los mismos datos infla la confianza.
  • ignorando la incertidumbre experimental. Una discrepancia puede ser aceptable si la incertidumbre experimental es mayor que la diferencia.
  • Extrapolando más allá del régimen validado. No se debe confiar en un modelo validado en un régimen en un régimen muy diferente sin evidencia adicional.
  • Mala documentación. Sin registros de validación detallados, la credibilidad de la simulación es difícil de evaluar.

Errores específicos de UQ

  • Suponiendo que UQ es opcional. Sin límites de incertidumbre, una simulación validada aún carece de un intervalo de confianza utilizable.
  • Ignorar las interacciones de los parámetros. El análisis de sensibilidad de una sola vez puede pasar por alto los efectos de interacción que capturan los métodos globales.
  • Tratar toda incertidumbre como aleatoria. Cierta incertidumbre es epistémica y puede reducirse a través de mejores datos o mejores modelos.

Guía de decisiones: ¿Cuánto rigor VVUQ necesita?

El nivel de rigor VVUQ debe coincidir con las consecuencias de la falla del modelo.

Situación Rigor recomendado Por qué
Código de Investigación Académica Verificación básica con MMS y convergencia de malla Nivel mínimo aceptable para la credibilidad
Resultados de simulación publicados Verificación más validación contra puntos de referencia Apoya la reproducibilidad y la revisión por pares
Decisiones de diseño industrial VVUQ completo con límites UQ Las opciones de diseño y el cumplimiento pueden depender del modelo
Aplicaciones de seguridad crítica Marco de estilo ASME con revisión independiente Los riesgos regulatorios y de responsabilidad son altos
Sustituto de aprendizaje automático Verificación de precisión sustituta más UQ de límites de predicción El error sustituto debe ser cuantificado
Mantenimiento de código o correcciones de errores Pruebas MMS dirigidas para módulos afectados Verificación rentable para las rutas de código modificadas

El resultado final es simple: el rigor VVUQ debe coincidir con las consecuencias del fracaso. El código académico necesita verificación básica. Los resultados publicados necesitan una validación más fuerte. Las aplicaciones industriales y de seguridad requieren una VVUQ integral y documentada.

Resumen y próximos pasos

La verificación, la validación y la cuantificación de la incertidumbre no son extras opcionales. Son partes centrales de la simulación científica creíble.

Una tubería VVUQ práctica debe seguir esta secuencia:

  1. Comience con la verificación de código utilizando MMS y solicite pruebas de precisión.
  2. Cuantificar errores numéricos a través de la verificación de la solución para las series de producción.
  3. Construya evidencia de validación con problemas de referencia y datos independientes.
  4. Agregue la cuantificación de la incertidumbre para informar los límites de confianza en las predicciones.
  5. Siga estándares como ASME VVUQ para estructurar el proceso y comunicar el rigor.

Incluso un programa básico de VVUQ, como las pruebas MMS, la convergencia de malla y un método UQ, pueden aumentar drásticamente la confianza en los resultados de la simulación y detectar errores de forma temprana.

Guías relacionadas

Para temas relacionados en flujos de trabajo de simulación científica en Matforge:

Referencias y lectura adicional