เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

โมเดลร้านอาหาร: การจัดการโต๊ะและเวลารอ

สมมติว่าต้องการเปิดร้านอาหารในย่านยอดนิยมของซานฟรานซิสโก การกำหนดจำนวนโต๊ะและกำลังการผลิตของห้องครัวถือเป็นเรื่องสำคัญมาก เพื่อให้รองรับลูกค้าได้มากที่สุด ขณะเดียวกันก็ลดการลงทุนเริ่มต้นและค่าใช้จ่ายในการดำเนินงานให้น้อยที่สุด โมเดลการจำลองแบบเหตุการณ์ไม่ต่อเนื่องช่วยสนับสนุนการตัดสินใจลงทุนนี้ได้ ด้วยการจำลองอัตราการครอบครองโต๊ะ เวลารอของลูกค้า และจำนวนลูกค้าที่ออกจากคิวเพราะรอนานเกินไป

เริ่มต้นด้วยการกำหนด generator ที่จำลองการขอโต๊ะและการตัดสินใจของลูกค้าว่าจะรอต่อหรือจะจากไป ตามระยะเวลารอที่เกิดขึ้น ในแบบฝึกหัดถัดไป จะได้ตั้งค่าโมเดล รันการจำลอง และวิเคราะห์ผลลัพธ์ หน่วยเวลาในโมเดลนี้คือนาที

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เปิดคำขอโต๊ะเป็น req เมื่อลูกค้าเข้ามาในร้านอาหาร
  • ใช้ตัวดำเนินการ bitwise-or เพื่อรอจนกว่าจะมีโต๊ะว่าง (req) หรือจนกว่าความอดทนของลูกค้าจะหมด (env.timeout(patience))
  • Yield เวลาที่ลูกค้าครอบครองโต๊ะ ซึ่งกำหนดโดยตัวแปร time_at_tables

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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
แก้ไขและรันโค้ด