当然,这本身并不是一个编程问题......但我想不出一个更好的地方来问这一切。
我正在编写一个应用程序,最终将帮助购物者确定如何在特定网站上实现最大节省。该网站提供几乎所有产品的两种价格 - 正常价格和折扣价格。任何人都可以享受折扣价,但只有一个折扣商品可以添加到任何给定的订单中。只有这些信息,激励是最小化您的订单siz,而是放置多个订单。另一方面,总运输成本由订单大小(按重量)决定,因此激励最大化订单大小并只放置一个订单。
我正在寻找一种模型,以确定最有效的方式来平衡订单,因为一个项目的可用折扣和权重影响订单的运输成本。
我记得回到学校的时候我认为这是一个线性编程问题......但我记得关于那个课程的所有内容都让人感到困惑。
任何人都有关于如何计算这个程序的数学建议吗?
答案 0 :(得分:2)
这不是常规线性编程,这是整数线性编程。前者可以在O( n ²)中解决,第二种是NP难的。
分支定界算法的某些变体应适用于您的程序。如果您不想自己实现它,可用的库包括GLPK,COIN-OR和CPLEX。
答案 1 :(得分:2)
扩展上述评论,这个问题在很大程度上取决于运输成本的精确结构。假设运输成本与(可能)非零常数项成线性关系。即,运费= C + Rw,其中C和R是常数,w是订单的权重。然后,事实证明最佳解决方案很简单:将折扣小于C的每个项目分组为一个订单,并分别对折扣大于C的每个项目进行排序(作为读者的练习)。在C = 0的退化情况下,您只需为每个项目单独订购。
另一方面,如果运输成本具有更多的阈值结构 - 例如:如果货物的重量小于B,则成本为C1但如果它大于B则成本为C2 - 这种情况成为NP完全装箱问题的一种形式。我在这里应该注意,仅仅因为形势像NP完全问题,你不应该立即放弃希望。对于许多现实世界的情况,存在良好的启发式方法,现实世界的输入范围完全有可能将问题限制在可管理的实例中。
在现实生活中,运费可能是一堆不同的东西(例如:可能是不连续的分段线性)的组合,这使得对问题的建模更加困难。但是,我希望我已经证明了清楚地了解这些成本是如何构建的,以便了解您的问题。