Destination Dispatch – tại sao thang máy bảo bạn đi thang A chứ không phải thang B?

Ở những toà nhà văn phòng/xịn xò, bạn không bấm tầng trong cabin nữa mà nhập tầng ngay ở sảnh, rồi hệ thống chỉ bạn qua thang A, B, C, D… Đó chính là kiểu điều khiển Destination Dispatch.

Destination Dispatch – tại sao thang máy bảo bạn đi thang A chứ không phải thang B?

Ý tưởng cốt lõi:

  • Thay vì mỗi thang nhận request “lẻ tẻ”, hệ thống nhìn toàn bộ nhu cầu của hành khách trước.
  • Sau đó gom người đi các tầng gần nhau vào cùng một thang → mỗi thang dừng ít tầng hơn, tổng thể nhanh hơn.

Khác với Collective Control (mỗi người tự bấm tầng trong cabin), Destination Dispatch làm một bước “tối ưu hoá trước khi bước vào thang”.

1. Mô hình đơn giản hoá

Để minh hoạ, ta dùng mô hình tối giản:

  • Tòa nhà 16 tầng (0–15), tất cả hành khách đều xuất phát từ tầng 0 (sảnh).
  • 3 thang máy: Elevator A, B, C, ban đầu đều ở tầng 0.
  • Mỗi hành khách có:
    • destination: tầng muốn tới (1–15).
  • Destination Dispatch sẽ:
    • Nhìn toàn bộ list destination.
    • Sắp xếp theo tầng.
    • Chia thành 3 cụm liên tiếp (cluster) và gán lần lượt cho thang A/B/C.

Ví dụ: có người đi các tầng: 3, 4, 5, 10, 11, 14 → hệ thống có thể gán:

  • Elevator A: 3, 4, 5
  • Elevator B: 10, 11
  • Elevator C: 14

Mỗi thang chỉ phải dừng một “đoạn” tầng liên tiếp → ít dừng hơn, tránh cảnh thang nào cũng ghé mọi tầng.

2. Demo Destination Dispatch – 3 thang, phân cụm điểm đến

Demo dưới đây cho phép bạn:

  • Thêm hành khách với destination cụ thể.
  • Thêm nhiều hành khách ngẫu nhiên.
  • Nhấn “Gán thang (Dispatch)” để Destination Dispatch chia các cụm điểm đến cho 3 thang.
  • Cho thang chạy (step hoặc auto) và quan sát từng thang dừng ở các tầng được giao.

Demo: Destination Dispatch – gom người theo cụm tầng

Thêm hành khách (destination floor), nhấn “Gán thang” để hệ thống chia nhóm điểm đến cho 3 thang (A, B, C), sau đó cho thang chạy và xem mỗi thang phục vụ cụm tầng riêng.

Thêm hành khách

Destination Dispatch

Chạy mô phỏng

Trạng thái

Chưa có hành khách nào. Thêm destination rồi nhấn “Gán thang (Dispatch)”.

Log

Chưa chạy thuật toán.

Giải thích nhanh logic demo

  • floors: 16 tầng (0–15), tất cả hành khách xuất phát từ tầng 0.
  • passengers: mảng các object { id, dest, elevator }, trong đó:
    • dest: tầng muốn tới (1–15).
    • elevator: index thang được gán (0=A, 1=B, 2=C) hoặc null nếu chưa gán.
  • elevators: mảng 3 thang:
    • { name, currentFloor, stops }, trong đó stops là danh sách tầng mà thang sẽ dừng (sort tăng dần, unique).
  • Gán thang (Dispatch):
    • Lấy list các hành khách, lọc theo những người chưa gán elevator.
    • Sắp xếp theo dest tăng dần.
    • Chia danh sách này thành 3 cụm liên tiếp: cluster 0, 1, 2.
    • Gán cluster 0 cho Elevator A, cluster 1 cho B, cluster 2 cho C.
    • Cập nhật stops của từng thang = tập các dest trong cluster (sort + unique).
  • Chạy 1 bước: với mỗi thang:
    • Nếu còn stops:
      • Lấy tầng mục tiêu đầu tiên target.
      • Nếu currentFloor < target → đi lên 1 tầng.
      • Nếu currentFloor > target → đi xuống 1 tầng.
      • Nếu bằng nhau → dừng, log lại, xoá target khỏi stops.
  • Vẽ trên canvas:
    • Tòa nhà 16 tầng, mỗi tầng là một đường ngang.
    • 3 trục thang A/B/C nằm cạnh nhau (3 “ống” riêng).
    • Mỗi thang là một hình chữ nhật màu riêng trên trục tương ứng.
    • Hành khách được vẽ cạnh trục thang đã được gán (màu theo thang); nếu chưa gán → vẽ ở khu “Waiting” bên trái.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...