동적 시스템의 수학적 모델

Python으로 배우는 이산 사건 시뮬레이션

Diogo Costa (PhD, MSc)

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

수학적 모델이란?

자연 또는 인간 주도 시스템을 수학적 개념과 언어로 설명합니다.

모델 분류:

  • 동적 vs 비동적
  • 이산형 vs 연속형
  • 결정론적 vs 확률론적(확률적)
  • 선형 vs 비선형
  • 기타

수학적 모델은 단순할 수도, 복잡할 수도 있습니다.

  • 현실의 디지털 근사
  • 모든 과정을 반영하는 것은 불가능

조지 박스: "모든 모델은 틀리지만, 어떤 것은 유용하다."

바위 지대를 가로지르는 강의 사진.

Python으로 배우는 이산 사건 시뮬레이션

예시: 자연 과정 예측 모델

하천 유량 모델

중국 고야야 수문 관측소의 관측 유량과 모의 유량의 시계열 그래프. 모델은 관측 유량을 잘 포착합니다. 두 경우 모두 유량은 시간에 따라 크게 변합니다.

  • 이 모델은 중국 고야야 수문 관측소의 유량을 예측합니다.

  • 예측은 입력으로 사용하는 강수 정보를 기반으로 합니다.

기타 예시

  • 일기예보
  • 파랑 예측
  • 호수 수질
  • 도시 홍수
  • 그 외 다수
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
Python으로 배우는 이산 사건 시뮬레이션

예시: 인간 활동 예측 모델

인플레이션 예측

BNP 파리바가 작성한 영국 인플레이션 기록(2002-2021)과 예측(2022) 그래프. 2022년 인플레이션 7%를 예측합니다.

  • 인플레이션 예측은 경제 위기 방지에 매우 중요합니다.

기타 예시

  • 공급망
  • 제조
  • 물류
  • 경제 전망
  • 교통
  • 기타
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Python으로 배우는 이산 사건 시뮬레이션

일반 코드 구성요소와 구조

  • 핵심 구성요소 3가지
  • 입력 데이터와 모델 매개변수
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • 실행 설정
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • 모델 엔진
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]
Python으로 배우는 이산 사건 시뮬레이션

모델 출력

제조 활동에 대한 이산 이벤트 모델 출력 예시

=> 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
Python으로 배우는 이산 사건 시뮬레이션

모델 결과 시각화

  • 모델 결과의 시각화: 패턴과 임계점을 파악하는 데 유용합니다.

  • 시각화는 시뮬레이션 목표에 맞춰야 합니다.

  • 유용한 시각화 패키지: matplotlib, seaborn, plotly.

Matplotlib 라이브러리 로고. Seaborn 라이브러리 로고. Plotly 라이브러리 로고.

예시

  • 모델 데이터(y)와 해당 시간값(x)의 2D 선/산점도
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • x를 구간으로 나누고 각 구간의 개수를 세는 히스토그램
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Python으로 배우는 이산 사건 시뮬레이션

Ayo berlatih!

Python으로 배우는 이산 사건 시뮬레이션

Preparing Video For Download...