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
SimPy có ba loại tài nguyên:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Tạo một resource
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)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)
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
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)
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.
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
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
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
Ví dụ
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