2010-01-08 19 views
6

Xin chào mọi người Stackoverflow,Thuật toán để tìm sự kết hợp tối ưu giữa các sản phẩm và cửa hàng để giảm thiểu chi phí

Tôi chạy một trang web tìm người dùng rẻ nhất để mua sách. Điều này rất dễ dàng cho một cuốn sách, nhưng đối với nhiều sách, đôi khi có thể rẻ hơn khi mua một cuốn sách tại một cửa hàng và một cuốn sách khác từ một cửa hàng khác.

Hiện tại tôi tìm thấy cửa hàng rẻ nhất bán tất cả sách trong danh sách của người dùng, nhưng tôi muốn có một hệ thống thông minh hơn. Dưới đây là một số thông tin khác:

  • Giá sách là không đổi cho cửa hàng.
  • Giá vận chuyển có thể khác nhau, tùy thuộc vào số lượng sách hoặc tổng giá trị của sách.
  • Mỗi đối tượng cửa hàng có thể lấy một loạt sách và trả lại chi phí giao hàng.
  • Thông thường, không phải mọi cửa hàng đều bán mọi sách.

Không chắc liệu liên kết đó có mát mẻ với trang web của tôi ở đây hay không nhưng nó được liệt kê trong tiểu sử người dùng của tôi.

Tôi muốn có thể tìm thấy sự kết hợp rẻ nhất giữa các cửa hàng và sách.

Tôi lo sợ nó đòi hỏi phương pháp tiếp cận vũ lực - và với 35 cửa hàng, số lượng kết hợp sẽ rất lớn đối với một số lượng sách khiêm tốn. Tôi có cảm giác số kết hợp là (#shops)^(# sách) - nhưng không phải 100%

Câu hỏi là, tôi nên sử dụng phương pháp tiếp cận nào? Vấn đề này có phù hợp với lớp học nổi tiếng không? Nếu lực lượng vũ phu là cần thiết, cách tốt nhất để làm điều này trong Ruby và tôi có thể ưu tiên các cửa hàng để thử đầu tiên không?

Trả lời

6

Thật không may đây là một ví dụ về vấn đề tối ưu hóa tổ hợp không có bất kỳ giải pháp dễ dàng nào. Bạn nói đúng rằng bạn thực sự làm, nói chung, cần một cách tiếp cận vũ phu. Tuy nhiên! Tôi nghi ngờ có một số cấu trúc đặc biệt trong vấn đề này sẽ giúp. Ví dụ: chi phí giao hàng sẽ không thay đổi ngẫu nhiên khi bạn thay đổi kết hợp sách - nó có thể sẽ tăng phụ tuyến tính và/hoặc bão hòa khi bạn thêm sách.

Đây là những gì tôi khuyên bạn nên, sau đó:

  1. Offline, ước tính các chính sách vận chuyển của mỗi cửa hàng, do đó, được đưa ra sách (và có lẽ trọng lượng của họ), bạn có thể ước tính chi phí vận chuyển mà không đề cập đến trang web của họ.
  2. Đối với mỗi cửa hàng, tính toán chi phí mỗi cuốn sách, nếu có.
  3. Ngoại tuyến, xem qua từng cửa hàng hoặc tập hợp các cửa hàng và ước tính bằng chính sách giao hàng ngoại tuyến của bạn, tổng chi phí sẽ là bao nhiêu.
  4. Chọn cửa hàng (hoặc cửa hàng) với chi phí rẻ nhất. Nếu có nhiều điểm giống nhau, hãy tính toán câu trả lời chính xác.

Điều đó sẽ giúp bạn bắt đầu và sẽ khiến bạn thiếu tìm kiếm đầy đủ.

+0

Xin cảm ơn phản hồi. 1-3 đã sẵn sàng. Phương thức cho mỗi cửa hàng được sử dụng để xác định chi phí giao hàng. Một trong những khó khăn là giá trị vận chuyển có thể được xác định bằng số lượng sách hoặc tổng giá đặt hàng - điều này làm cho cuộc sống trở nên phức tạp hơn một chút. Xác định xem cửa hàng đơn lẻ nào vận chuyển tất cả sách với chi phí thấp nhất là dễ dàng - điều đó cho thấy một trong những cuốn sách nên được mua tại cửa hàng A, trong khi phần còn lại từ cửa hàng B. – dkam

1

Lực lượng vũ phu hầu như luôn có thể được thay thế bằng một phương pháp phỏng đoán tốt, nghĩa là một thuật toán được biết là hoạt động không tối ưu "đủ tốt".

Mặc dù tôi không chắc chắn 100%, tôi đoán nó có liên quan với Knapsack problem là (như chúng ta đều được cho là bây giờ haha ​​..) NP-complete.

Không có gì tốt hơn để cung cấp ngay bây giờ, nhưng chúc bạn may mắn!

2

Đây là biến thể về những gì được gọi là "Vấn đề chuyển nhượng". AP cổ điển có một vài giải pháp tiêu chuẩn, bao gồm thuật toán Munkres (aka "Hungary") và thuật toán JVC (Junker Volgenant Castanon iirc).

Ý tưởng cơ bản là tính toán chi phí cho mỗi bài tập (nghĩa là chi phí mua mỗi sách tại mỗi cửa hàng), sau đó chọn tập hợp các bài tập giảm thiểu tổng chi phí. Điều này có thể được thực hiện trong thời gian đa thức, tôi tin.

Thực tế là chi phí vận chuyển từ mỗi nhà bán lẻ phụ thuộc vào tổng số đơn đặt hàng khiến mọi thứ trở nên phức tạp hơn đáng kể. Bạn có thể sử dụng phương pháp kết hợp không xem xét chi phí giao hàng ban đầu, sau đó thực hiện cho các đơn đặt hàng tổng hợp khi bạn đã xác định được một số nhiệm vụ đầy hứa hẹn.

Chúc may mắn, có vẻ như là một vấn đề thú vị!

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