Mô hình nhà hàng: Quản lý bàn và thời gian chờ
Hãy tưởng tượng bạn muốn mở một nhà hàng ở khu vực sầm uất của San Francisco. Việc quyết định số lượng bàn và công suất bếp là cực kỳ quan trọng để vừa phục vụ được tối đa khách hàng, vừa giảm thiểu chi phí đầu tư ban đầu và chi phí vận hành. Một mô hình sự kiện rời rạc có thể hỗ trợ quyết định đầu tư này bằng cách mô phỏng mức độ sử dụng bàn, thời gian chờ của khách, và số khách rời hàng đợi do phải chờ quá lâu.
Trước tiên, hãy định nghĩa bộ sinh (generator) mô phỏng các yêu cầu đặt bàn và quyết định của khách là chờ hay rời đi dựa trên thời gian chờ. Ở bài tập tiếp theo, bạn sẽ thiết lập mô hình, chạy mô phỏng và phân tích kết quả. Thời gian trong mô hình được tính bằng phút.
Bài tập này là một phần của khóa học
Mô phỏng Sự kiện Rời rạc bằng Python
Hướng dẫn bài tập
- Mở một yêu cầu bàn là
reqkhi có khách đến nhà hàng. - Dùng toán tử bitwise-or để chờ đến khi có bàn trống (
req) hoặc đến khi khách hết kiên nhẫn (env.timeout(patience)). - Yield thời gian bàn được khách sử dụng, được cho bởi biến
time_at_tables.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
def customer(env, name, tables):
global customers_served, customers_quiting_waiting
arrive = env.now
# Request a table
with tables.request() as ____:
patience = random.uniform(MIN_PATIENCE, MAX_PATIENCE)
# Wait until a table is free or the customer runs out of patience
results = yield ____ | ____
wait = env.now - arrive
if req in results:
print(f"{env.now:7.4f} {name} > Waited {wait:6.3f} minutes for a table!")
time_at_tables = random.uniform(MIN_SEATING_TIME, MAX_SEATING_TIME)
# Yield the time the table is occupied by the customer
____ env.timeout(time_at_tables)
print(f"{env.now:7.4f} {name} > Finished meal :)")
costumers_served += 1
else:
print(f"{env.now:7.4f} {name} > Gave up waiting and left after waiting {wait:7.4f} minutes :(")
customers_quiting_waiting += 1