6

当然,这本身不是一个编程问题......但我想不出一个更好的地方来问这个问题。

我正在编写一个应用程序,最终将帮助购物者确定如何在特定站点上实现最大的节省。该网站几乎为每种产品提供两种价格——正常价格和折扣价。任何人都可以享受折扣价,但任何给定订单只能添加一件折扣商品。仅凭这些信息,动机就是最小化您的订单大小,而是下多个订单。另一方面,总运输成本由订单大小(按重量)决定,因此存在最大化订单大小并只下一个订单的动机。

我正在寻找一种模型来确定平衡订单的最有效方法,因为一件商品的可用折扣和重量影响订单的运输成本。

我记得回到学校的时候,我认为这是一个线性编程问题……但我只记得那门课是多么令人困惑。

有人对如何进行该程序的数学运算有任何提示吗?

4

2 回答 2

2

这不是常规线性规划,这是整数线性规划。前者可在 O(n²) 内求解,后者是NP -hard。

分支定界算法的某些变体应该适用于您的程序。如果您不想自己实现它,可用的库包括 GLPK、COIN-OR 和 CPLEX。

于 2011-02-16T22:34:02.787 回答
2

扩展我上面的评论,这个问题在很大程度上取决于运输成本的精确结构。假设运输成本与(可能)非零常数项成线性关系。即,运费 = C + Rw,其中 C 和 R 是常数,w 是订单的重量。然后,事实证明最佳​​解决方案很简单:将折扣小于 C 的每个项目分组到一个订单中,并分别订购折扣大于 C 的每个项目(留给读者作为练习)。在 C = 0 的退化情况下,您只需为每个项目单独下订单。

另一方面,如果运输成本具有更多的阈值结构——例如:如果货物的重量小于 B,则成本为 C1,但如果大于 B,则成本为 C2——情况变为NP完全装箱问题的一种形式。我应该在这里指出,仅仅因为情况就像一个 NP 完全问题,你不应该立即放弃希望。对于许多现实世界的情况,存在良好的启发式方法,并且现实世界的输入范围完全有可能将问题限制为可管理的实例。

在现实生活中,运输成本很可能是一堆不同事物的组合(例如:可能具有不连续性的分段线性),这使得建模问题变得更加困难。但是,我希望我已经证明,清楚地了解这些成本的结构对于理解您的问题至关重要。

于 2011-02-18T17:49:43.687 回答