แบบจำลองทางคณิตศาสตร์ของระบบพลวัต

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

Diogo Costa (PhD, MSc)

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

แบบจำลองทางคณิตศาสตร์คืออะไร?

การอธิบายระบบธรรมชาติหรือระบบที่มนุษย์สร้างขึ้นด้วยแนวคิดและภาษาทางคณิตศาสตร์

โมเดลแบ่งประเภทได้ดังนี้:

  • พลวัต vs. ไม่ใช่พลวัต
  • ไม่ต่อเนื่อง vs. ต่อเนื่อง
  • ดีเทอร์มินิสติก vs. ความน่าจะเป็น (สโตแคสติก)
  • เชิงเส้น vs. ไม่เชิงเส้น
  • อื่น ๆ

แบบจำลองทางคณิตศาสตร์อาจเรียบง่ายหรือซับซ้อนก็ได้

  • เป็นการประมาณความเป็นจริงในรูปแบบดิจิทัล
  • ไม่สามารถคำนึงถึงทุกกระบวนการได้

George Box: "All models are wrong, but some are useful."

ภาพถ่ายแม่น้ำที่ไหลผ่านพื้นที่หิน

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ตัวอย่าง: โมเดลพยากรณ์กระบวนการทางธรรมชาติ

แบบจำลองการไหลในแม่น้ำ

กราฟแสดงปริมาณน้ำท่าที่สังเกตได้และจำลองตามเวลา ณ สถานีอุทกวิทยา Goaya ในจีน โมเดลสามารถจับค่าปริมาณน้ำท่าที่สังเกตได้ โดยปริมาณน้ำท่าแปรผันอย่างมีนัยสำคัญตามเวลาทั้งในโมเดลและการสังเกต

  • โมเดลนี้พยากรณ์ปริมาณน้ำท่าสำหรับสถานีอุทกวิทยา Goaya ในประเทศจีน

  • การพยากรณ์อิงข้อมูลปริมาณน้ำฝนที่ใช้เป็น input ของโมเดล

ตัวอย่างอื่น ๆ

  • การพยากรณ์อากาศ
  • การพยากรณ์คลื่นทะเล
  • คุณภาพน้ำในทะเลสาบ
  • น้ำท่วมในเมือง
  • และการประยุกต์ใช้อื่น ๆ อีกมากมาย
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

ตัวอย่าง: โมเดลพยากรณ์กิจกรรมที่มนุษย์ขับเคลื่อน

การพยากรณ์เงินเฟ้อ

กราฟแสดงข้อมูลเงินเฟ้อของสหราชอาณาจักร (2002-2021) และการพยากรณ์ (2022) โดย BNP Paribas ซึ่งคาดการณ์เงินเฟ้อ 7% ในปี 2022

  • การพยากรณ์เงินเฟ้อมีความสำคัญอย่างยิ่งในการป้องกันวิกฤตเศรษฐกิจ

ตัวอย่างอื่น ๆ

  • ห่วงโซ่อุปทาน
  • การผลิต
  • โลจิสติกส์
  • การพยากรณ์เศรษฐกิจ
  • การขนส่ง
  • อื่น ๆ
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

องค์ประกอบและโครงสร้างโค้ดโดยทั่วไป

  • 3 องค์ประกอบหลัก
  • ข้อมูล input และพารามิเตอร์ของโมเดล
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • การกำหนดค่า run
# 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

ผลลัพธ์ของโมเดล

ตัวอย่าง output ของแบบจำลอง discrete-event สำหรับกิจกรรมการผลิต

=> 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

ตัวอย่าง

  • กราฟเส้นหรือกราฟกระจาย 2D ของข้อมูลที่จำลอง (y) เทียบกับค่าเวลา (x)
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

มาฝึกกันเถอะ!

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

Preparing Video For Download...