แพ็กเกจ SimPy: ประเภทของทรัพยากร

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

Dr Diogo Costa

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

ประเภทของทรัพยากรที่ใช้ได้

  • SimPy มีทรัพยากร 3 ประเภท:

  • resource

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

ประเภทของทรัพยากรที่ใช้ได้

simpy.Resource()

  • แบ่งปันทรัพยากรระหว่างกระบวนการ
  • ตัวอย่าง: โต๊ะในร้านอาหาร

simpy.Container()

  • ทรัพยากรสำหรับแบ่งปันสิ่งที่เหมือนกันระหว่างกระบวนการ
  • ปริมาณอาจเป็นแบบไม่ต่อเนื่อง (เช่น แอปเปิล) หรือต่อเนื่อง (เช่น น้ำ)
  • ตัวอย่าง: อ่างเก็บน้ำ

simpy.Store()

  • เก็บออบเจกต์ได้จำนวนไม่จำกัด
  • ตัวอย่าง: ซูเปอร์มาร์เก็ต
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

เมธอด: simpy.Resource()

การสร้างทรัพยากร

resource_1 = simpy.Resource(env, capacity=8)
  • ใช้เมื่อมีความจุทรัพยากรจำกัด (เช่น capacity=8)
  • ใช้จำกัดจำนวนกระบวนการที่เข้าถึงทรัพยากรพร้อมกัน
  • กระบวนการต้องร้องขอสิทธิ์ใช้งานทรัพยากร
    • หากทรัพยากรถูกใช้งานทั้งหมด คำร้องจะถูกเพิ่มเข้าคิว
  • เมื่อกระบวนการคืนทรัพยากร คำร้องที่รออยู่จะถูกเรียกใช้งาน

การร้องขอทรัพยากร

# Open resource request
with resource_1.request() as request:

# Make resource request yield request
# Once resource is avaiable yield env.timeout(event_duration)
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ทรัพยากร: ลำดับความสำคัญและการแย่งใช้งาน

  • รูปแบบต่อยอดจากทรัพยากรก่อนหน้า

    resource_1 = simpy.PreemptiveResource(
    env, capacity=1)
    
  • บางกระบวนการอาจมีลำดับความสำคัญสูงกว่ากระบวนการอื่น

  • ตัวอย่าง: ช่างซ่อม

    • ลำดับที่ 1: ซ่อมเครื่องจักรที่เสีย
    • ลำดับที่ 2 หรือต่ำกว่า: บำรุงรักษาเครื่องจักร
  • การใช้งานคล้ายกับ simpy.Resource()

  • ร้องขอทรัพยากรที่มีลำดับความสำคัญสูงสุด

    with resource_1.request(priority=1) as 
    request:
    
    yield request
    yield env.timeout(process_duration)
    
  • ร้องขอทรัพยากรที่มีลำดับความสำคัญต่ำกว่า

    with resource_1.request(priority=2) as 
    request:
    
    yield request
    yield env.timeout(process_duration)
    
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

เมธอด: simpy.Container()

  • เหมาะสำหรับจำลองการผลิต/บริโภคสิ่งที่เป็นเนื้อเดียวกัน

  • อาจเป็นแบบต่อเนื่อง (เช่น น้ำ) หรือไม่ต่อเนื่อง (เช่น แอปเปิล)

ตัวอย่าง: ปริมาณน้ำมันสำรองในสถานีบริการ

  • รถยนต์ลดปริมาณสำรอง ส่วนรถเติมน้ำมันเพิ่มปริมาณ
  • การสร้าง container
    tank_1 = simpy.Container(
    env, tank_size, init=tank_size)
    
  • เพิ่มและลดปริมาณใน container/ถัง

    yield tank_1.put(add_quantity)
    yield tank_1.get(remove_quantity)
    
  • ดูปริมาณปัจจุบันในถัง

    tank_1.level
    
  • ดูความจุรวมของถัง

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

เมธอด: simpy.Store()

  • สร้าง store

    store_1 = simpy.Store(
    env, capacity=2)
    
  • คล้ายกับ simpy.Container() แต่สามารถเก็บออบเจกต์ที่แตกต่างกันได้

  • ต่างจาก container ที่เก็บเป็น "ปริมาณ" แบบนามธรรม

  • เพิ่มและลดรายการในพื้นที่เก็บข้อมูล
yield store_1.put("item_1")
yield store_1.get()
  • ดูรายการออบเจกต์ที่มีอยู่

    store_1.items
    
  • ดูความจุของ store

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

ทรัพยากร SimPy ช่วยสนับสนุนการตัดสินใจทางธุรกิจได้อย่างไร?

ตัวอย่าง

  • ซูเปอร์มาร์เก็ตที่มีแคชเชียร์ 1 คน
  • เจ้าของต้องการทราบว่าคุ้มค่าที่จะเพิ่มแคชเชียร์หรือไม่
  • การเพิ่มแคชเชียร์จะช่วยลดเวลารอหรือไม่?

สถานการณ์ปัจจุบัน: แคชเชียร์ 1 คน

  • simpy.Resource(env, capacity=1)
...
time: 23.7 min | Customer 30 > Finished

สถานการณ์จำลอง: แคชเชียร์ n คน

  • simpy.Resource(env, capacity=2)
...
time: 13.2 min | Customer 30 > Finished
  • simpy.Resource(env, capacity=3)
...
time: 8.6 min | Customer 30 > Finished
  • simpy.Resource(env, capacity=4)
...
time: 8.6 min | Customer 30 > Finished
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

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

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

Preparing Video For Download...