Modelos matemáticos de sistemas dinámicos

Simulación de eventos discretos en Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

¿Qué es un modelo matemático?

Descripción de un sistema natural o humano usando conceptos y lenguaje matemáticos.

Los modelos se clasifican en:

  • Dinámicos vs. no dinámicos
  • Discretos vs. continuos
  • Deterministas vs. probabilísticos (estocásticos)
  • Lineales vs. no lineales
  • Otros

Los modelos matemáticos pueden ser simples o complejos.

  • Aproximaciones digitales de la realidad
  • Imposible incluir todos los procesos

George Box: "Todos los modelos están mal, pero algunos son útiles."

Foto de un río que fluye entre rocas.

Simulación de eventos discretos en Python

Ejemplo: modelo para predecir procesos naturales

Modelo de caudal en un río

Gráfico de caudal observado y simulado en el tiempo en la estación hidrológica de Goaya (China). El modelo captura los registros observados. El caudal varía mucho en el tiempo en modelo y observaciones.

  • Este modelo predice el caudal en la estación hidrológica de Goaya, China.

  • La predicción se basa en la lluvia como entrada del modelo.

Otros ejemplos

  • Pronóstico del tiempo
  • Pronóstico del oleaje
  • Calidad del agua en lagos
  • Inundaciones urbanas
  • y muchas otras aplicaciones
1 Chen, C., He, W., Zhou, H. et al. A comparative study among machine learning and numerical models for simulating groundwater dynamics in the Heihe River Basin, northwestern China. Sci Rep 10, 3904 (2020). https://doi.org/10.1038/s41598-020-60698-9
Simulación de eventos discretos en Python

Ejemplo: modelo para predecir actividades humanas

Predicción de la inflación

Gráfico de inflación del Reino Unido (2002-2021) y pronóstico (2022) de BNP Paribas. El pronóstico indica 7% en 2022.

  • Predecir la inflación es clave para evitar crisis económicas

Otros ejemplos

  • Cadena de suministro
  • Manufactura
  • Logística
  • Pronósticos económicos
  • Transporte
  • Otros
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Simulación de eventos discretos en Python

Componentes y estructura del código

  • 3 componentes principales
  • Datos de entrada y parámetros del modelo
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Configuración de ejecución
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Motor del modelo
def discrete_model(processes, simulation_time):

  # 1) Run end-condition
  while (time < simulation_time):
      process_names = list(processes.keys())

# 2) Loop over all processes for p in range(len(process_names)): process_name_p = process_names[p]
# 3) Account for effect of each process time += processes[process_name_p]
Simulación de eventos discretos en Python

Salidas del modelo

Ejemplo de salida de un modelo de eventos discretos para una actividad de manufactura

=> START OF SIMULATION  (Time = 0 days) 
Time =    6.00 days  |  Process Complete: Transport of raw material
Time =    9.00 days  |  Process Complete: Building components
Time =   11.00 days  |  Process Complete: Assembling parts
Time =   14.00 days  |  Process Complete: Selling product
=> COMPLETED: Supply-Chain cycle #1 | Time = 15.5 days
Time =   21.50 days  |  Process Complete: Transport raw material
Time =   24.50 days  | Process Complete: Building components
Time =   26.50 days  |  Process Complete: Assembling parts
Time =   29.50 days  |  Process Complete: Selling product
=> COMPLETED: Supply-Chain cycle #2 | Time = 31.0 days
Simulación de eventos discretos en Python

Visualización de resultados del modelo

  • Visualización gráfica de resultados: ayuda a detectar patrones y puntos de inflexión.

  • Adapta la visualización a los objetivos de la simulación.

  • Paquetes útiles: matplotlib, seaborn, plotly.

Logotipo de la biblioteca Matplotlib. Logotipo de la biblioteca Seaborn. Logotipo de la biblioteca Plotly.

Ejemplos

  • Gráficos 2D (línea o dispersión) de los datos modelados (y) vs. el tiempo (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Histograma para agrupar los datos en x y contar valores por bin
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Simulación de eventos discretos en Python

¡Vamos a practicar!

Simulación de eventos discretos en Python

Preparing Video For Download...