尽量减少购买所有商品时使用的购物者数量
Minimize number of shoppers used while buying all items
我们有 N 位购物者,每人有 100 美元,还有一份包含 M 件商品的清单,每件商品的价格为 [0-50 美元](仅限整数)。
我们需要购买符合以下要求的所有物品 -
- 尽量减少使用的购物者数量
- 如果我们需要使用超过 1 个购物者,请尽量减少购物者花费的美元差异
例子
5 件商品成本 [10,20,20,5,10]
解决方案 = 1 位购物者购买了所有商品。
仅使用 1 个购物者,因为单个购物者的总预算为 65 美元 < 100 美元。
5 件商品成本 [50,15,30,30,10]
解决方案 = 购物者 1 购买 [50,15]
,购物者 2 购买 [30,30,10]
我们需要使用 2 个购物者,因为总数 > 100 并分配他们,以便
购物者之间的差异很小(这里只有 5 美元)。
伪代码:
For n_shoppers in range(1,N) :
受限制
一旦问题可以用总购物者的 n_shoppers
个子集解决,就打破循环(这样我们就有了所需的最少购物者数量和最佳分配)
这真的很慢而且效率低下 - 关于如何更好地解决这个问题有什么建议吗?我目前正在使用 CVXPY 解决它。
一种方式如下
- 首先求解 min 购物者模型。现在你知道模型的尺寸了。
- 接下来求解最小方差模型。由于购物者的数量现在是恒定的,因此更好地定义了均值(线性)。如果不知道购物者的数量,则很难求平均值。 (另一种方法是最小化范围:
min UP-LO, UP>= shopper[i], LO <= shopper[i]
)。
我们有 N 位购物者,每人有 100 美元,还有一份包含 M 件商品的清单,每件商品的价格为 [0-50 美元](仅限整数)。
我们需要购买符合以下要求的所有物品 -
- 尽量减少使用的购物者数量
- 如果我们需要使用超过 1 个购物者,请尽量减少购物者花费的美元差异
例子
5 件商品成本
[10,20,20,5,10]
解决方案 = 1 位购物者购买了所有商品。 仅使用 1 个购物者,因为单个购物者的总预算为 65 美元 < 100 美元。
5 件商品成本
[50,15,30,30,10]
解决方案 = 购物者 1 购买
[50,15]
,购物者 2 购买[30,30,10]
我们需要使用 2 个购物者,因为总数 > 100 并分配他们,以便 购物者之间的差异很小(这里只有 5 美元)。
伪代码:
For n_shoppers in range(1,N) :
受限制
一旦问题可以用总购物者的 n_shoppers
个子集解决,就打破循环(这样我们就有了所需的最少购物者数量和最佳分配)
这真的很慢而且效率低下 - 关于如何更好地解决这个问题有什么建议吗?我目前正在使用 CVXPY 解决它。
一种方式如下
- 首先求解 min 购物者模型。现在你知道模型的尺寸了。
- 接下来求解最小方差模型。由于购物者的数量现在是恒定的,因此更好地定义了均值(线性)。如果不知道购物者的数量,则很难求平均值。 (另一种方法是最小化范围:
min UP-LO, UP>= shopper[i], LO <= shopper[i]
)。