Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用约束规划优化购物篮?_Java_Constraints_Mathematical Optimization_Constraint Programming - Fatal编程技术网

Java 如何使用约束规划优化购物篮?

Java 如何使用约束规划优化购物篮?,java,constraints,mathematical-optimization,constraint-programming,Java,Constraints,Mathematical Optimization,Constraint Programming,我有一张我想买的东西的清单。这些商品由不同的商店提供,价格也不同。这些商店有单独的送货费用。我正在寻找一个最佳的购物策略(以及支持它的java库),以最低的总价格购买所有商品 例子: 商品1在商店1以100美元出售,在商店2以111美元出售。 商品2在商店1以90美元出售,在商店2以85美元出售。 Shop1的配送成本:如果订单总额小于150美元,则为10美元$否则为0 商店2的交货成本:如果订单总额小于50美元,则为5美元$否则为0 如果我在Shop1购买Item1和Item2,总成本为

我有一张我想买的东西的清单。这些商品由不同的商店提供,价格也不同。这些商店有单独的送货费用。我正在寻找一个最佳的购物策略(以及支持它的java库),以最低的总价格购买所有商品

例子:
  • 商品1在商店1以100美元出售,在商店2以111美元出售。
  • 商品2在商店1以90美元出售,在商店2以85美元出售。
  • Shop1的配送成本:如果订单总额小于150美元,则为10美元$否则为0
  • 商店2的交货成本:如果订单总额小于50美元,则为5美元$否则为0
  • 如果我在Shop1购买Item1和Item2,总成本为$100+$90+$0=$190。
  • 如果我在Shop2购买项目1和项目2,总成本为$111+$85+$0=$196。
  • 如果我在Shop1购买Item1,在Shop2购买Item2,则总成本为$100+$10+$85+$0= 195
如果我在Shop1订购Item1和Item2,我会得到最低价格:$190

到目前为止我试过什么 在此之前我问过,这让我进入了约束编程领域。我看了一下和,但我不知道如何创建一个模型来解决我的问题

         | shop1 | shop2 | shop3 | ...
-----------------------------------------
item1    | p11   | p12   | p13   |
item2    | p21   | p22   | p23   |
 .       |       |       |       |
 .       |       |       |       |
-----------------------------------------
shipping | s1    | s2    | s3    |
limit    | l1    | l2    | l3    |
-----------------------------------------
total    | t1    | t2    | t3    |
-----------------------------------------
我的想法是定义这些约束:

  • 每个价格“p xy”在域(0,c)中定义,其中c是该商店中商品的价格
  • 一行中只有一个价格应为非零
  • 如果从一家商店购买一件或多件商品,且价格总和低于限额,则将运输成本添加到总成本中
  • 商店总成本是商店中所有物品的价格之和
  • 总成本是所有车间总成本的总和
目标是“总成本”。我想尽量减少这个

在cream中,我无法表达有条件运输成本的“if-then”约束

在choco中,这些约束是存在的,但即使对于5种商品和10家商店,程序也运行了10分钟,没有找到解决方案

问题:
我应该如何表达我的约束,使这个问题对于约束编程求解器是可解的?

您所问的问题本质上是。我喜欢的维基百科页面上有大量关于解决方案的资源。然而,该问题是NP完全问题,因此您可能希望通过搜索或其他形式在问题空间中寻找接近最佳的解决方案

首先要记住的是,在约束问题中,您可能会花费大量时间来生成解决方案。在您前面的示例中,虽然五件商品和十家店铺看起来很小,但实际上,它产生了一个很大的问题空间(在1e5的数量级上,不包括进一步解决问题的条件定价的额外复杂性)

这个问题的限制条件是你每种商品都要买一个。目标是最低价格。我认为你们的情况相当不错,尽管我对第一点和第二点不是很确定

  • 每个价格“p xy”在域(0,c)中定义,其中c是该商店中商品的价格
  • 一行中只有一个价格应为非零

  • 在计算时,我会考虑将运费摊销,而不是把它作为总价值加进去。

    < P>我已经在(高级约束编程语言)中实现了这个问题:它非常先进,可能可以用作Java模型的模型

    对于Choco模式,您是否尝试过不同的搜索策略?不同的策略可能更快


    顺便说一句,您可能想查看的另一个Java约束编程解算器是。

    我不太确定这是一个k背包问题。该问题确实提到了“购物篮”一词,但没有具体说明任何给定货物的容量。如果指定了最大装运大小,那么问题看起来更像是背包问题

    这个问题实际上只是一个基本的网络流问题,在弧上有运输成本,在原点有运输成本。因为你有一个明确的目标函数-最小化运输+产品成本,而且可能只有一个解决方案,所以CP可能不是最好的方法

    将求解视为线性规划问题:

    最低:运输+产品成本

    ST:已发货产品总数>=需求量(每种产品)


    您可能需要为运输成本建立一些分段线性方程,但这不应该是一个问题。

    好的,现在我认识到优化中的背包问题。但我仍然不知道如何解决它。至于运输成本,我在背包问题上看不到类似的问题。我将编辑我的答案,并尝试给出一些建议。我认为最好的办法是对问题本身进行一些研究。它的正文相当丰富,有一些非常有趣的论文。你能再解释一下你的最后一段吗?你会怎么处理运费?非常感谢!我一定会仔细看看迷你锌,尤其是你的计划!不是所有的商店都卖所有的商品,你会如何模拟这一事实?只需给他们一个非常高的价格,比如99999999?这是一种方法,可能是最简单的方法。另一种方法是将其编码为0(零),并相应地调整计算,但这可能会更加混乱。我现在已经修复了模型中的一个错误,并添加了第三个没有第1项(编码为9999999)的商店。下一次尝试:我继续使用单数组方法,但对域进行了相当大的改进(这似乎是正确的)。此外,N/A编码为99999(Gecode/fz不需要),搜索启发式为“最大/indomain_max”。Gecode/fz在大约25秒内解决了这个问题,结果如下:total=42013 x=[13,20,17,18,18,13,17,17,20,13,13,18,17,13,13,18,17,13,13,17,17,17,8,13,36,10,17,13,13,13,17,20,13]我在博客文章“优化购物篮:迷你锌模型的开发”中对此做了更多解释: