Modelos matemáticos de sistemas dinâmicos

Simulação de Eventos Discretos em Python

Diogo Costa (PhD, MSc)

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

O que é um modelo matemático?

Descrição de um sistema natural ou humano usando conceitos e linguagem matemáticos.

Modelos podem ser classificados como:

  • Dinâmicos vs. não dinâmicos
  • Discretos vs. contínuos
  • Determinísticos vs. probabilísticos (estocásticos)
  • Lineares vs. não lineares
  • Outros

Modelos matemáticos podem ser simples ou complexos.

  • Aproximações digitais da realidade
  • Impossível capturar todos os processos

George Box: "Todos os modelos estão errados, mas alguns são úteis."

Foto de um rio correndo por uma área rochosa.

Simulação de Eventos Discretos em Python

Exemplo: modelo para prever processos naturais

Modelo de vazão em um rio

Um gráfico da vazão observada e simulada ao longo do tempo na estação hidrológica de Goaya, na China. O modelo captura os registros observados. A vazão varia bastante no tempo em ambos.

  • Este modelo prevê a vazão na estação hidrológica de Goaya, China.

  • A previsão usa a chuva como entrada do modelo.

Outros exemplos

  • Previsão do tempo
  • Previsão de ondulação oceânica
  • Qualidade da água em lagos
  • Alagamentos urbanos
  • e muitas outras aplicações
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
Simulação de Eventos Discretos em Python

Exemplo: modelo para atividades humanas

Prevendo a inflação

Um gráfico dos registros de inflação do Reino Unido (2002-2021) e da projeção (2022) feita pelo BNP Paribas. A projeção indica 7% em 2022.

  • Prever a inflação é crucial para evitar crises econômicas

Outros exemplos

  • Cadeia de suprimentos
  • Manufatura
  • Logística
  • Projeções econômicas
  • Transporte
  • Outros
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Simulação de Eventos Discretos em Python

Componentes e estrutura do código

  • 3 componentes principais
  • Dados de entrada e parâmetros do modelo
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Configuração da execução
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Mecanismo do 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]
Simulação de Eventos Discretos em Python

Saídas do modelo

Exemplo de saída de um modelo de eventos discretos para uma atividade de manufatura

=> 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
Simulação de Eventos Discretos em Python

Visualização de resultados

  • Visualização gráfica dos resultados: ajuda a achar padrões e pontos de inflexão.

  • A visualização deve seguir os objetivos da simulação.

  • Pacotes úteis: matplotlib, seaborn, plotly.

Logotipo da biblioteca Matplotlib. Logotipo da biblioteca Seaborn. Logotipo da biblioteca Plotly.

Exemplos

  • Gráficos 2D de linha ou dispersão: dados modelados (y) vs. tempo (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Histograma para agrupar os dados em x e contar valores por faixa
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Simulação de Eventos Discretos em Python

Vamos praticar!

Simulação de Eventos Discretos em Python

Preparing Video For Download...