การสร้างโมเดล discrete-event ด้วย SimPy

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

Dr Diogo Costa

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

ก่อนสร้างโมเดล

  • ทำความเข้าใจระบบไดนามิก

  • กำหนดวัตถุประสงค์ของโมเดล discrete-event

  • ระบุกระบวนการ:

    • ที่ทำงานแบบขนาน
    • ที่ทำงานตามลำดับ
  • ระบุ SimPy resource ที่เหมาะสม (resource, container, store)

  • กำหนดสถาปัตยกรรมของโมเดล:

    • ระบุตัวแปรสถานะ
    • ขั้นตอนการทำงานของโมเดล
    • Generator
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ระบบไดนามิกและวัตถุประสงค์ของโมเดล

ทำความเข้าใจระบบไดนามิก

  • ปัจจัยใดบ้างที่ส่งผลต่อพฤติกรรมของระบบ?
  • กระบวนการหรือเหตุการณ์ใดบ้างที่ต้องรวมไว้?

วัตถุประสงค์ของโมเดล

  • มักใช้เพื่อปรับระบบให้เหมาะสมที่สุด
  • ต้องการปรับปรุงด้านใดบ้าง?

    • เพิ่มจำนวนลูกค้า
    • ลดเวลาในการดำเนินการ
    • จัดสรรทรัพยากรให้เหมาะสม
  • ตัวแปรสถานะที่ใช้ติดตามวัตถุประสงค์เหล่านี้

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

ระบุ SimPy resource ที่เหมาะสม

Shared Resources

simpy.Resource(env, capacity=4)
  • ทรัพยากรที่ใช้ร่วมกันระหว่างกระบวนการ

ตัวอย่าง

  • โต๊ะในร้านอาหาร
  • เครื่องจักรในโรงงาน
  • ที่นั่งในโรงละคร
  • แคชเชียร์ในร้านค้า

Containers

simpy.Container(env, capacity, 
init=initial_capacity)
  • ทรัพยากรที่ทำงานเหมือนถังหรือตะกร้า

  • เพิ่มและลดปริมาณได้ด้วย:

.put() และ .get()

ตัวอย่าง

  • สำรองเชื้อเพลิงในปั๊มน้ำมัน
  • ถ่านหินในโรงไฟฟ้าพลังงานถ่านหิน
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ระบุ SimPy resource ที่เหมาะสม

Store

simpy.Store(env, capacity=4)
  • ทรัพยากรที่ทำงานเหมือนคลังสินค้าที่มีหลายรายการ

  • ความจุไม่จำกัด (ค่าเริ่มต้น)

  • ช่องเก็บข้อมูลสำหรับออบเจกต์ใดก็ได้

  • เพิ่มและลบรายการได้ด้วย:

.put() และ .get()

ตัวอย่าง

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

เชื่อมเหตุการณ์ด้วย bitwise operator

SimPy ใช้ bitwise operator เพื่อเชื่อมสองเหตุการณ์เข้าด้วยกัน

ประเภทของ operator ใน Python

  • Arithmetic, logical และ comparison operator

Bitwise operator

  • คำนวณระดับบิตบนจำนวนเต็ม
  • ต้องการ operand สองตัว
    • ตัวอย่าง: a & b, a >> b, a ^ b

ใน SimPy

  • Bitwise operator สร้าง condition event
  • รอทั้งสองหรือเพียงหนึ่งในสองเหตุการณ์/กระบวนการ

Bitwise operator ที่เกี่ยวข้องสำหรับ SimPy

  • รอทั้งสองกระบวนการ: __and__() หรือ &
  • รอกระบวนการใดกระบวนการหนึ่ง: __or__() หรือ |
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

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

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

Preparing Video For Download...