我有一份我想买的物品清单。这些商品由不同的商店和不同的价格提供。商店有单独的送货费用。我正在寻找一种最佳的购物策略(以及支持它的 java 库)以最低的总价购买所有商品。
例子:
- 商品 1 在 Shop1 的售价为 100 美元,在 Shop2 的售价为 111 美元。
- Item2 在 Shop1 的售价为 90 美元,在 Shop2 的售价为 85 美元。
- Shop1的运费:如果总订单<$150,则为$10;$0 否则
- Shop2的运费:如果总订单<50美元,则为5美元;$0 否则
- 如果我在 Shop1 购买商品 1 和商品 2,总成本为 100 美元 + 90 美元 + 0 美元 = 190 美元。
- 如果我在 Shop2 购买项目 1 和项目 2,总成本为 111 美元 + 85 美元 + 0 美元 = 196 美元。
- 如果我在 Shop1 购买商品 1,在 Shop2 购买商品 2,总成本为 100 美元 + 10 美元 + 85 美元 + 0 美元 = 195。
如果我在 Shop1 订购商品 1 和商品 2,我将获得最低价格:190 美元
到目前为止我尝试了什么
在此之前我问了另一个问题,这使我进入了约束编程领域。我看了cream和choco,但我不知道如何创建一个模型来解决我的问题。
| 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是该商店中商品的价格
- 一行中只有一个价格不应该为零
- 如果从一家商店购买一件或多件商品并且价格总和低于限额,则将运费添加到总成本中
- 商店总成本是商店中所有商品价格的总和
- 总成本是所有商店总和的总和
目标是“总成本”。我想尽量减少这种情况。
在奶油中,我无法表达有条件运输成本的“如果那么”约束。
在 choco 中存在这些限制,但即使对于 5 件商品和 10 家商店,该程序也运行了 10 分钟而没有找到解决方案。
问题
我应该如何表达我的约束以使这个问题对于约束编程求解器可以解决?