เหตุการณ์และกระบวนการแบบไม่กำหนดตายตัว

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

Diogo Costa (PhD, MSc)

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

ความไม่กำหนดตายตัวของเหตุการณ์

หมายเหตุ: คำว่า "เหตุการณ์" และ "กระบวนการ" ใช้แทนกันได้

ความไม่กำหนดตายตัวของเหตุการณ์ (หรือกระบวนการ) คืออะไร?

  • กระบวนการที่ไม่สามารถคาดเดาได้อย่างแม่นยำ
  • เรียกว่ากระบวนการ "ไม่กำหนดตายตัว" (Non-Deterministic)

เหตุใดกระบวนการแบบกำหนดตายตัวจึงสำคัญ?

  • กิจกรรมทางธรรมชาติและที่มนุษย์ขับเคลื่อนมักเกี่ยวข้องกับกระบวนการแบบไม่กำหนดตายตัว
  • แต่ละครั้งที่เกิดขึ้นจะดำเนินไปในรูปแบบที่แตกต่างกัน
  • ไม่สามารถระบุระยะเวลาได้อย่างแม่นยำ
  • อาจส่งผลกระทบอย่างมากต่อผลลัพธ์ของระบบ
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ตัวอย่างกระบวนการหรือเหตุการณ์แบบไม่กำหนดตายตัว

โลกธรรมชาติ

  • ช่วงเวลาที่ภูเขาไฟจะปะทุ
  • ช่วงเวลาที่แน่นอนที่ฝนจะตก
  • เวลาและตำแหน่งที่ฟ้าผ่า
  • เวลาและตำแหน่งที่พายุทอร์นาโดจะก่อตัว

กระบวนการที่มนุษย์ขับเคลื่อนหรือริเริ่ม

  • ช่วงเวลาที่เครื่องจักรจะขัดข้อง
  • ช่วงเวลาที่รู้สึกอยากเข้าห้องน้ำ
  • ช่วงเวลาที่ทารกเริ่มร้องไห้
  • เที่ยวบินพาณิชย์จะล่าช้าหรือไม่
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

การแทนเหตุการณ์แบบไม่กำหนดตายตัวในโมเดล discrete-event

กระบวนการแบบไม่กำหนดตายตัว

  • สร้างผลกระทบต่อระบบในรูปแบบที่ไม่ซ้ำเดิม
  • ไม่ทราบระยะเวลาที่แน่นอน

สถิติ

  • ใช้แทนความแปรปรวนของระยะเวลากระบวนการ
  • แพ็กเกจ random ช่วยในส่วนนี้ได้

  • ตัวอย่าง: random.randint(start, end)

import random

# Non-deterministic processes
process_1 = [5, 15]

while time < simulation_time:

   # Update simulation time: process_1
   time += random.randint(
               process_1[0], 
               process_1[1])

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

การแทนเหตุการณ์แบบไม่กำหนดตายตัวด้วย SimPy

  • ไม่มีวิธีเฉพาะสำหรับจัดการกระบวนการแบบไม่กำหนดตายตัว

  • คำนวณความแปรปรวนของระยะเวลาเหตุการณ์เช่นเดียวกับโมเดลที่ไม่ใช้ SimPy

  • ส่งค่าสถิติที่เหมาะสมไปยัง .timeout()

import random

# Non-deterministic processes
process_1 = [5, 15]

while True:

  # Update simulation time: process_1
  yield env.timeout(random.randint(
         process_1[0], 
         process_1[1]))
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

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

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

Preparing Video For Download...