2013-04-11 37 views
11

Tôi gặp sự cố sau. Người dùng có một giỏ hàng với N mục trong đó. Có một số lượng Q của mỗi mục. Hơn nữa, có P nhà kho và mỗi kho chứa một mức cổ phiếu nhất định cho mỗi sản phẩm (có thể là 0). Khoảng cách giữa mỗi nhà kho và khách hàng cũng được biết đến. Tôi cần phải tìm một tập hợp các kho có thể chứa các đơn đặt hàng và đáp ứng các hạn chế sau đây (ra lệnh bằng cách giảm ưu tiên):Thực hiện đơn đặt hàng tối ưu

  1. Nó nên chứa một số lượng tối thiểu của các kho
  2. Tất cả kho nên càng gần với khách hàng vì nó có thể.

Bất kỳ ý tưởng nào được đánh giá cao. Cảm ơn!

UPD:

Nếu một nhà kho không thể thực hiện một số mục hàng hoàn toàn, sau đó nó có thể được cung cấp bởi nhà kho khác nhau. Ví dụ. chúng ta cần 10 quả táo và chúng tôi có 2 nhà kho có mức cổ phiếu là 7 và 3. Sau đó táo sẽ được cung cấp bởi hai kho này (để cung cấp 10 cái tổng cộng).

UPD 2 Số lượng kho có sẵn gần 15. Vì vậy, sức mạnh vũ phu sẽ không giúp ích ở đây.

+1

Bạn cần xác định thêm một chút: điều gì sẽ xảy ra nếu khách hàng đặt hàng số lượng 'Q' cao hơn mức cổ phiếu' S' của một số kho? Nhà kho khác có phân phối tất cả các mặt hàng 'Q' hay họ có thể chia sẻ thứ tự (ví dụ, nhà kho đầu tiên gửi các mặt hàng' S', một kho khác 'QS'? – blubb

Trả lời

3

Tôi khuyên bạn nên sử dụng giải pháp của David Eisenstat. Nếu bạn muốn hiểu thêm về chủ đề hoặc cần phải thực hiện thuật toán để tự giải quyết các chương trình số nguyên, tôi có thể đề xuất tham chiếu sau đây:

Chapter 9 từ một bài giảng của MIT về Lập trình toán học ứng dụng đưa ra lời giới thiệu thú vị về lập trình số nguyên . Trên trang thứ ba, bạn tìm thấy vấn đề vị trí kho kho làm ví dụ về sự cố có thể giải được bằng lập trình số nguyên.Lưu ý rằng vấn đề được mô tả có hơi chung chung hơn vấn đề bạn mô tả trong câu hỏi của bạn: Đối với trường hợp của bạn, kho có thể được giả định là luôn mở (y i = 1) và chi phí vận hành cố định f i của nhà kho luôn là f i = 0 trong trường hợp của bạn.

Phần còn lại của chương này đi vào chi tiết về lập trình số nguyên và cũng nêu bật các cách tiếp cận khác nhau để giải các chương trình số nguyên.

+0

Cảm ơn bạn đã tham khảo –

+0

@volodymyr: Vui vì tôi có thể trợ giúp! Cảm ơn quá :) – blubb

+0

@ blubb: Có giải pháp được triển khai nào cho vấn đề này không, bây giờ bạn biết không? –

10

Điều này có thể giải được bằng lập trình số nguyên.

Cho phép các mục được lập chỉ mục bởi i và các kho được lập chỉ mục bởi j. Hãy để số Qi là số lượng của mặt hàng i trong giỏ hàng và Sij là số lượng của mặt hàng i tại kho jDj là khoảng cách từ khách hàng đến nhà kho j.

Đầu tiên tìm số lượng kho tối thiểu k. Hãy để biến nhị phân xj1 nếu và chỉ khi kho j có liên quan đến thứ tự. k là giá trị của chương trình này.

minimize sum over j of xj 
subject to 
for all i, (sum over j of min(Sij, Qi) * xj) >= Qi 
for all j, xj in {0, 1} 

Thứ hai tìm kho gần nhất. Tôi sẽ giả định rằng chúng tôi muốn giảm thiểu tổng khoảng cách.

minimize sum over j of Dj * xj 
subject to 
for all i, (sum over j of min(Sij, Qi) * xj) >= Qi 
(sum over j of xj) <= k 
for all j, xj in {0, 1} 

Có nhiều thư viện khác nhau để giải các chương trình số nguyên, một số nguồn mở/miễn phí. Họ thường chấp nhận các chương trình ở định dạng tương tự nhưng hạn chế hơn so với chương trình tôi đã trình bày ở đây. Bạn sẽ phải tự viết một số mã để mở rộng số tiền và số lượng phổ dụng ("cho tất cả").

+0

Cảm ơn. Có lẽ bạn có thể tư vấn một số bài viết/hướng dẫn/cuốn sách –

+0

Tôi đã học được tài liệu này từ một lớp học không sử dụng sách giáo khoa, xin lỗi –

+0

@DavidEisenstat khóa học này là gì? –

0

Bạn có thể hoặc không thích điều này, nhưng tôi có kinh nghiệm xử lý đơn đặt hàng và lưu kho. Kinh nghiệm thực tế cá nhân của tôi không đòi hỏi một bản ngã mà là một loạt các kho và các công cụ phục vụ khách hàng (hy vọng đây sẽ là thức ăn cho bạn và những người khác đang gặp khó khăn trong thế giới phát triển vận hành kho bãi):

Nếu bạn có 10 các mặt hàng trên đơn đặt hàng.

Bạn có 9 trong kho

Bạn có 5 ở một vị trí và 4 trong một vị trí khác.

Bạn chia đơn đặt hàng. 1 sản phẩm không thể hoàn thành sẽ trở thành 'lệnh trả lại'. Nó có thể bị hủy bỏ bởi vì bạn không biết khi nào bạn hoặc nếu nhà cung cấp của bạn sẽ cung cấp. Hãy chắc chắn rằng bạn treo vào tài liệu tham khảo ủy quyền thẻ tín dụng của bạn.

9 sản phẩm còn lại (sản phẩm có thể thực hiện) trong kho sẽ được truy vấn vào khoảng không quảng cáo ảo kho lưu trữ của bạn để có kết hợp tốt nhất.

Trong trường hợp của chúng tôi, chúng tôi thực hiện ba điều:

Nhân viên thực hiện tại kho X có thể chuyển vật phẩm từ kho khác một cách dễ dàng không? Có/Không

Nếu có sản phẩm nào có thể chuyển.

Điều này có thể yêu cầu tương tác của con người dựa trên tải và khả năng của kho.

Nếu bạn đang tiến hành tự động hóa và khoảng không quảng cáo ảo biến động ngày này qua ngày khác, thì bạn cho nó dự đoán tốt nhất của bạn trước kho hàng tồn kho.

Tiếp theo, chia thứ tự thành hai, với tham chiếu đến thứ tự chính cho các con đường mòn giấy.

Sau đó, bạn in tới đích và hy vọng họ có thể thực hiện, nếu không thể, sau đó hy vọng họ có thể thực hiện một phần đơn đặt hàng và tạo lại đơn đặt hàng có thể bị hủy theo yêu cầu của khách hàng.

Vì vậy, về cơ bản, đây là những gì bạn phải viết mã.

Đặt hàng Xem lại lần đầu tiên để chia nhỏ thứ tự và tham chiếu đến thứ tự chính. chức năng kiểm kho kho. Thứ tự chia theo trọng số dựa trên khoảng không quảng cáo ảo có liên quan đến thứ tự chính dựa trên khả năng của kho để truy xuất sản phẩm từ các kho khác. Trang chọn in (chức năng kho) Lệnh quay lại hoặc các chức năng thủ công một phần (công cụ dịch vụ khách hàng) Chỉ thu tiền trên những thứ bạn đã hoàn thành khi được đánh dấu là đã giao.

Cân nhắc: Đảm bảo thứ tự chính tham chiếu các hành động ngược lại thứ tự và chia tách. Hãy chắc chắn rằng các đơn đặt hàng tách và một phần thực hiện tham chiếu bất kỳ thứ tự và chia tách bổ sung nào. Điền đầy đủ những gì bạn có thể Đánh dấu đã được giao. Thu thập $$$ trên các sản phẩm được giao.

Hy vọng điều này sẽ giúp và chúc may mắn !!!

Các vấn đề liên quan