Tôi nên sử dụng thuật toán nào để tạo tính năng lập lịch cho nhân viên tự động?


18

Hãy tưởng tượng một doanh nghiệp địa phương nhỏ (trong trường hợp của tôi là một nhà giữ chó) với vài chục nhân viên bán thời gian. Mục tiêu là tự động tạo lịch trình nhân viên hàng tuần. Câu hỏi của tôi là về những cách tiếp cận thuật toán để khám phá cho vấn đề này.

Có rất nhiều hạn chế cần lưu ý, chủ yếu (1) sự sẵn có của nhân viên và (2) nhu cầu của từng ca, không chỉ có bao nhiêu nhân viên cho mỗi ca mà cả các kỹ năng cần thiết cho mỗi ca (ví dụ cho một ca nhất định, bạn có thể cần một người biết lái xe để đưa đón / thả chó, cho người khác, một người biết cách cho chó tắm, v.v.).

Các ràng buộc khác bao gồm những việc như tránh hoặc yêu cầu một số combo nhân viên nhất định - có thể do mâu thuẫn về tính cách một mặt hoặc do đào tạo bằng thẩm thấu từ cấp cao đến nhân viên cấp dưới.

Ngoài ra, có những ưu tiên để đưa vào tài khoản. Một số nhân viên thích buổi sáng, một số hai ngày liên tiếp thay vì nói thứ Hai và thứ Năm, v.v. Chúng tôi biết rằng chúng tôi không thể luôn đáp ứng sở thích của mọi người. Trong thực tế, chúng tôi có một hệ thống phân cấp trong đó các nhân viên có được những nỗ lực đầu tiên về sự lựa chọn của họ.

Tôi có linh cảm rằng có một cách để giảm hoặc thể hiện vấn đề này thành một thuật toán đã được giải quyết. Nhưng tôi không biết nên tìm thuật toán nào. Những thuật toán hiện có, cụ thể nào sẽ hứa hẹn nhất?



3
Và như một bên, tôi chưa bao giờ tìm thấy một thuật toán hoạt động cho vấn đề này ngoài những ràng buộc rất đơn giản nhất trong quá khứ ngoài việc "đặt mọi người xuống lịch trình ngẫu nhiên bỏ qua bất kỳ ràng buộc nào khác và để họ trao đổi hoặc thay đổi theo ý muốn."

4
Có một giải pháp hoàn chỉnh có sẵn từ trang JBoss Drools: optaplanner.org - bạn cần mã hóa các ràng buộc lập lịch, chẳng hạn như số giờ tối đa mỗi tuần, v.v.
BobDalgleish

Tôi nghi ngờ điều này tương đương với bài toán SAT, được biết là hoàn thành NP, nhưng không có nghi ngờ gì về các thuật toán tốt có được kết quả hợp lý.
David Conrad

Câu trả lời:


16

Các thuật toán như Tìm kiếm cục bộ (Tìm kiếm Tabu , Mô phỏng , Chấp nhận muộn ) hoạt động rất tốt đối với các vấn đề như vậy.

Như Bob gợi ý, nếu bạn đang làm việc trong Java, hãy xem OptaPlanner (nguồn mở). Xem video này về sắp xếp nhân viên .


3
Bạn có thể giải thích các thuật toán hoặc thêm liên kết đến một nơi nào đó không? Nếu bạn thêm liên kết, vui lòng thêm một chút thông tin từ trang có liên quan.
Adam Zuckerman

Làm xong. Lưu ý: nhiều trong số này cũng được giải thích trên wikipedia.
Geoffrey De Smet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.