Tôi có một biến thể của bài toán gán rằng thuật toán Munkres/Hungary thông thường dường như không được trang bị để giải quyết.Các vấn đề về thuật toán Munkres cho bài tập không chuẩn
Trong bài tập phân bổ truyền thống, có n công nhân cần được chỉ định cho n công việc và ma trận có chứa chi phí phân công mỗi công nhân cho mỗi công việc.
Trong biến thể này, chúng tôi chỉ có công nhân m (m < n). Vì thuật toán Munkres yêu cầu số lượng công nhân và công ăn việc làm tương đương chúng tôi tạo ra (n - m) "công nhân giả" có thể được chỉ định cho các công việc rảnh rỗi. Ngoài ra, bản thân các công việc được tổ chức trong một số lượng lớn các thể loại rời rạc.
Chúng tôi muốn áp đặt ràng buộc rằng ít nhất 1 công việc từ mỗi danh mục được gán cho một công nhân thực sự (không giả). Điều này rất khó thực hiện một cách tao nhã: bạn có thể chọn một công việc ngẫu nhiên từ mỗi thể loại và giả tạo xói mòn từng chi phí liên quan đến công nhân thực, nhưng đây là một giải pháp rất thô lỗ làm tổn hại đến tính toàn vẹn của nhiệm vụ cuối cùng.
Điều chúng tôi hiện đang chạy thuật toán nhiều lần, mỗi lần đánh giá phân bổ đầu ra và sau đó sửa đổi ma trận chi phí sao cho chi phí cho tất cả các công việc trong bất kỳ danh mục nào được chỉ gán công nhân giả được giảm nhẹ. Điều này hoạt động đầy đủ, nhưng đối với các tập dữ liệu lớn vừa phải (n ~ = 500), quá trình này có thể mất một thời gian (mỗi phép gán Munkres có thể mất 10 giây để tính toán, và với đủ loại có thể là số lần lặp lại không quan trọng).
Có thuật toán Munkres đã sửa đổi hoặc một thuật toán khác hoàn toàn, điều đó sẽ giải quyết vấn đề này hiệu quả hơn không?
Cảm ơn, điều này có vẻ đầy hứa hẹn. Tôi không quen với dòng chảy chi phí tối thiểu - nhìn vào nó ngay bây giờ - vì vậy đây có thể là một câu hỏi ngớ ngẩn, nhưng công thức này có đảm bảo rằng mỗi công nhân được giao một công việc? – daosmith
Có, dòng chảy chi phí tối thiểu là sự khái quát hóa vấn đề gán, mà không có các nút C, đây là vấn đề gán tiêu chuẩn. Thuật toán Hungary giải quyết vấn đề chuyển nhượng. – maniek