Thuật toán nhóm


8

Chúng tôi đã phát triển một thuật toán tùy thuộc vào thời gian đăng ký của một số công nhân và nơi sinh sống của họ, tính toán cách để nhóm chúng vào một số phương tiện và tuyến đường phải theo các phương tiện để đưa họ đến nơi làm việc. Điều này đã được thực hiện bằng thuật toán TSP (Bài toán nhân viên bán hàng du lịch) và một số tùy chỉnh khác.

Chúng tôi muốn đi xa hơn và cải thiện nó. Hiện tại, sức chứa chỗ ngồi của xe được cố định ở 4 (5 vị trí nhưng một người lái bị chiếm dụng) và chúng tôi muốn làm cho số tiền này "biến". Nói cách khác, chúng tôi muốn, trước khi thực hiện thuật toán chính, xác định sự kết hợp của các phương tiện (và chỗ ngồi miễn phí của chúng) có thể cần thiết. Điều quan trọng cần biết là khi tôi nói về xe cộ, tôi nói về các loại phương tiện, ví dụ Xe A có 4 chỗ, Xe B là 7 chỗ, v.v. Vì vậy, tôi không nói về việc có một chiếc Audi A8 5 chỗ, Ghế Ibiza 5 chỗ, một Xe buýt 20 chỗ, nói.

Cho đến nay, những gì tôi nghĩ là như sau:

  1. Xác định nhóm công nhân.
  2. Xác định có bao nhiêu phương tiện sẽ cần và chỗ ngồi (miễn phí) của họ. Đó là những gì tôi đang hỏi trong câu hỏi đó [a].
  3. Người dùng chọn kết hợp ưa thích và tiếp tục.
  4. Áp dụng thuật toán đã được phát triển bằng cách sử dụng kết hợp các phương tiện và xem liệu nó có đạt được giải pháp khả thi hay không.

Câu hỏi của tôi là làm thế nào để phát triển thuật toán [a]. Ví dụ sau đây sẽ cho bạn thấy kết quả của việc thực hiện [a]:

Hãy tưởng tượng chúng ta có những người sau đây để nhóm vào các phương tiện 4, 7, 10 chỗ miễn phí. nhập mô tả hình ảnh ở đây

Sau khi thực hiện [a], chúng ta sẽ có kết quả:

  • G3 (2 công nhân): Một xe 4 chỗ miễn phí (xe có nhiều chỗ trống hơn sẽ bị loại bỏ).
  • G2 (2 công nhân): một xe 4 chỗ miễn phí (xe có nhiều chỗ trống hơn sẽ bị loại bỏ).
  • G1 (9 công nhân):

    • Phương án A: 3 xe 4 chỗ.
    • Tùy chọn B: 1 xe 4 chỗ và một trong 7 xe.
    • Tùy chọn C: 2 xe 7 chỗ.
    • Tùy chọn D: một xe 10 chỗ.

Tôi đã nghĩ về một xấp xỉ:

  • Tạo các loại phương tiện và thêm chúng vào danh sách được sắp xếp (tiêu chí sắp xếp phải là chỗ ngồi).
  • Đối với mỗi nhóm công nhân, hãy làm:
    • Tính kết hợp [b].
  • Kết quả in trên màn hình.

Vì vậy, vấn đề chính là làm thế nào để phát triển [b].

Bất kỳ đề xuất? Xin lỗi nếu tôi đã giải thích bản thân mình xấu.


1
Người lái xe không nên là một phần của nhóm? Từ mô tả của bạn, có vẻ như anh ấy / cô ấy chỉ lái xe. Có phải các trình điều khiển chỉ là trình điều khiển chuyên dụng hoặc họ là một phần của công nhân?
null

3
Tôi muốn nói rằng bạn chỉ đơn giản là đi sai về nó. Cơ sở của thuật toán nên là lấp đầy mọi chiếc xe nhưng cuối cùng. Đã sửa kích thước nhóm nó một lỗ lớn trong tối ưu hóa này.
paparazzo

1
Có thể là một ý tưởng tốt để xem xét các tài liệu xung quanh "vấn đề định tuyến xe và hỗn hợp phương tiện" mà theo như tôi có thể nói về vấn đề mà bạn đang cố gắng giải quyết
Renaud M.

1
@russellhoff Tôi không biết về JaCoP, nhưng có lẽ bạn sẽ muốn dùng thử tại OR-tools. Đó là một bộ giải CP khác, có API Java (được cung cấp cho các thư viện mà bạn liệt kê có vẻ quan trọng), dường như cung cấp một số "chuyên môn hóa" cho các vấn đề định tuyến xe. Nếu bạn xem xét các ví dụ mà họ cung cấp, bạn có thể tìm thấy thứ gì đó mà bạn có thể thích nghi (bạn cũng có thể xem qua developers.google.com.vn/optimization/routing/tsp )
Renaud M.

1
"TSP (Du lịch Salesman Problem) thuật toán" - Tôi không biết rằng có một thuật toán cụ thể để giải quyết TSP. AIUI, giải pháp phổ biến nhất là mô phỏng ủ, nhưng tôi cũng có những cách tiếp cận khác ...
Jules

Câu trả lời:


2

Tôi đã đưa ra một giải pháp khả thi: sử dụng Vấn đề thỏa mãn ràng buộc để giải quyết nó.

Sẽ có một ràng buộc cho mỗi Nhóm, như sau:

số lượng công nhân của nhóm <= tổng trên mỗi chiếc xe (số lượng xe X chỗ ngồi của xe)

Biến số duy nhất là số lượng xe, phần còn lại là hằng số. Vì vậy, trong ví dụ của tôi sẽ có những điều sau đây:

9 <= 4x + 7y + 10z
2 <= 4a + 7b + 10c
2 <= 4j + 7k + 10i

Tôi đã tìm thấy một số thư viện (JaCoP, Drools và OptaPlanner) và tôi hiện đang sử dụng thư viện đầu tiên. Nhưng tôi không biết làm thế nào để xác định đúng các ràng buộc này ...

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.