Gói SimPy: Các loại tài nguyên

Mô phỏng Sự kiện Rời rạc bằng Python

Dr Diogo Costa

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

Các loại tài nguyên khả dụng

  • SimPy có ba loại tài nguyên:

  • resource

  • container
  • store
Mô phỏng Sự kiện Rời rạc bằng Python

Các loại tài nguyên khả dụng

simpy.Resource()

  • Chia sẻ tài nguyên giữa các quy trình
  • Ví dụ: bàn trong nhà hàng

simpy.Container()

  • Tài nguyên để chia sẻ vật chất đồng nhất giữa các quy trình
  • Lượng có thể rời rạc (vd: táo) hoặc liên tục (vd: nước)
  • Ví dụ: hồ chứa nước

simpy.Store()

  • Lưu trữ số lượng đối tượng có thể không giới hạn
  • Ví dụ: siêu thị
Mô phỏng Sự kiện Rời rạc bằng Python

Phương thức: simpy.Resource()

Tạo một resource

resource_1 = simpy.Resource(env, capacity=8)
  • Dùng khi tài nguyên có sức chứa hữu hạn (vd: capacity=8)
  • Dùng để giới hạn số quy trình truy cập đồng thời
  • Quy trình cần yêu cầu quyền sử dụng tài nguyên
    • Nếu đang hết tài nguyên, yêu cầu sẽ được xếp hàng
  • Khi quy trình trả tài nguyên, yêu cầu chờ sẽ được kích hoạt

Yêu cầu tài nguyên

# Mở yêu cầu tài nguyên
with resource_1.request() as request:

# Gửi yêu cầu yield request
# Khi tài nguyên sẵn sàng yield env.timeout(event_duration)
Mô phỏng Sự kiện Rời rạc bằng Python

Tài nguyên: ưu tiên và thu hồi

  • Biến thể của resource trước

    resource_1 = simpy.PreemptiveResource(
    env, capacity=1)
    
  • Một số quy trình có thể có mức ưu tiên cao hơn

  • Ví dụ: thợ sửa chữa

    • Ưu tiên 1: sửa máy hỏng
    • Ưu tiên 2 trở xuống: bảo trì máy
  • Cách dùng tương tự simpy.Resource()

  • Yêu cầu tài nguyên với ưu tiên cao nhất

    with resource_1.request(priority=1) as 
    request:
    
    yield request
    yield env.timeout(process_duration)
    
  • Yêu cầu tài nguyên với ưu tiên thấp hơn

    with resource_1.request(priority=2) as 
    request:
    
    yield request
    yield env.timeout(process_duration)
    
Mô phỏng Sự kiện Rời rạc bằng Python

Phương thức: simpy.Container()

  • Hữu ích để mô phỏng sản xuất/tiêu thụ vật chất đồng nhất, không phân biệt

  • Có thể liên tục (như nước) hoặc rời rạc (như táo)

Ví dụ: Dự trữ xăng của trạm xăng.

  • Xe làm giảm dự trữ, xe bồn làm tăng
  • Tạo một container
    tank_1 = simpy.Container(
    env, tank_size, init=tank_size)
    
  • Thêm và bớt trong bồn/chứa

    yield tank_1.put(add_quantity)
    yield tank_1.get(remove_quantity)
    
  • Lấy lượng hiện có trong bồn

    tank_1.level
    
  • Lấy tổng sức chứa bồn

    tank_1.capacity
    
Mô phỏng Sự kiện Rời rạc bằng Python

Phương thức: simpy.Store()

  • Tạo một kho

    store_1 = simpy.Store(
    env, capacity=2)
    
  • Tương tự simpy.Container() nhưng lưu được nhiều đối tượng khác nhau

  • Trái với "lượng" trừu tượng trong container

  • Thêm và lấy khỏi kho
yield store_1.put("item_1")
yield store_1.get()
  • Lấy danh sách mục hiện có

    store_1.items
    
  • Lấy sức chứa của kho

    store_1.capacity
    
Mô phỏng Sự kiện Rời rạc bằng Python

Tài nguyên SimPy hỗ trợ quyết định kinh doanh thế nào?

Ví dụ

  • Siêu thị có 1 thu ngân
  • Chủ muốn biết có nên đầu tư thêm thu ngân không
  • Thêm thu ngân có giảm thời gian chờ?

Hiện tại: 1 thu ngân

  • simpy.Resource(env, capacity=1)
...
thời gian: 23.7 phút | Khách 30 > Hoàn tất

Kịch bản mô phỏng: n thu ngân

  • simpy.Resource(env, capacity=2)
...
thời gian: 13.2 phút | Khách 30 > Hoàn tất
  • simpy.Resource(env, capacity=3)
...
thời gian: 8.6 phút | Khách 30 > Hoàn tất
  • simpy.Resource(env, capacity=4)
...
thời gian: 8.6 phút | Khách 30 > Hoàn tất
Mô phỏng Sự kiện Rời rạc bằng Python

Ayo berlatih!

Mô phỏng Sự kiện Rời rạc bằng Python

Preparing Video For Download...