Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

Hướng dẫn bài tập

  • Mở một yêu cầu bàn là req khi 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
Chỉnh sửa và Chạy Mã