【发布时间】:2011-02-18 19:23:46
【问题描述】:
我有一份我想购买的物品清单。这些商品由不同的商店和不同的价格提供。商店有单独的送货费用。我正在寻找一种最佳的购物策略(以及支持它的 java 库)以最低的总价购买所有商品。
示例:
- 商品 1 在 Shop1 的售价为 100 美元,在 Shop2 的售价为 111 美元。
- 商品 2 在 Shop1 的售价为 90 美元,在 Shop2 的售价为 85 美元。
- Shop1 的运费:如果总订单
- Shop2 的运费:如果总订单
- 如果我在 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 美元
到目前为止我尝试了什么
我问过another question,然后才让我进入约束编程领域。我查看了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 分钟而没有找到解决方案。
问题
我应该如何表达我的约束以使这个问题可以被约束规划求解器解决?
【问题讨论】:
标签: java constraints mathematical-optimization constraint-programming