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
Sự xuất hiện của sự kiện trong thực tế có thể bị ảnh hưởng bởi nhiều tình huống.
Phổ biến nhất gồm:
Các tình huống này có thể mô hình hóa bằng SimPy (mô phỏng sự kiện rời rạc).
Ví dụ
Khách đến cửa hàng quần áo
def customer_arrivals(env, shop)
Tìm mặt hàng cụ thể
env.timeout(search_time)
if shop.available[item]:
Bộ sinh: ghép toàn bộ mã
def customer_arrivals(env, shop):while True: yield env.timeout(search_time)# Chỉ mua nếu còn hàng if shop.available[item]: env.process(shop_buyer(env, item, num_items, shop))
Một số sự kiện có thể bị gián đoạn do:
Phương thức
simpy_process_1.interrupt()
Ví dụ
Máy định kỳ hỏng, làm gián đoạn dây chuyền.
def break_machine(env):# Thỉnh thoảng máy hỏng. while True: # Thời gian giữa các lần hỏng yield env.timeout(fail_time())# Máy hỏng: ngắt tiến trình simpy_process_1.interrupt()
capacity=5:simpy.Resource(env, capacity=5)
Ví dụ: Dự trữ xăng tại trạm phải được bổ sung định kỳ
with gas_station.request() as request:# Yêu cầu một trụ bơm yield request# Khi có trụ bơm: bơm nhiên liệu liters_request = 10 yield fuel_reserve.get(liters_request) # Việc bơm "thực" tốn thời gian refuel_duration = liters_request / refuel_speedyield env.timeout(refuel_duration)
Toán tử bit
a & b, a >> b, a ^ bTrong SimPy
Toán tử bit dùng trong SimPy
__and__() hoặc &__or__() hoặc |Ví dụ: Khán giả chờ đến lượt mua vé hoặc phim bán hết
with counter.request() as my_turn:# Chờ đến lượt hoặc phim bán hết result = yield my_turn | counter.sold_out[movie]# Nếu còn vé if my_turn in result: theater.num_moviegoers[movie] += 1 return# Nếu hết vé if my_turn not in result: theater.num_renegers[movie] += 1 return
Mô phỏng Sự kiện Rời rạc bằng Python