algorithm - 找到从 limit x 供应商处购买 p 产品的最佳方式

标签 algorithm

必须从 20 个供应商(或 v 供应商)那里购买 100 件产品(或 p 产品)。每个供应商都有所有这些产品,但他们出售不同的价格。

http://i.stack.imgur.com/oaupb.jpg  << Image description. Sorry, I can not post Image because I'm a new user.

我想找到购买 100 件产品的最佳价格。假设没有运费。 有 v^p 种方式。而且我只会得到一种价格最优惠的方式。 如果没有要求,问题似乎很容易:由于时间交货(或某些原因),将订单中供应商的数量限制为 x。

所以,问题是:找到从限制 x 个供应商(有 v 个供应商,x<=v)购买 p 产品的最佳方式。

我可以生成所有供应商组合(有 C(v,x) 组合)并比较总价。但是组合实在是太多了。 (如果有 20 个供应商,则有大约 185k 种组合)。 我坚持这个想法。 有人有同样的问题,请帮助我。非常感谢。

最佳答案

这个问题等同于非度量的k-center problem (城市 = 产品,仓库 = 供应商),这是 NP 难的。

我会尝试混合整数规划。这是一个公式。

minimize c(i, j) y(i, j)  # cost of all of the orders
subject to
for all i: sum over j of y(i, j) = 1  # buy each product once
for all i, j: y(i, j) <= z(j)  # buy products only from chosen vendors
sum over j of z(j) <= x  # choose at most x vendors
for all i, j: 0 <= y(i, j) <= 1
for all j: z(j) in {0, 1}

变量的解释是i是产品,j是厂商,c(i, j)是成本来自供应商j的产品i的数量,如果我们购买产品y(i, j)1 i 来自供应商 j0 否则,z(j)1 是我们从vendor j0 否则。

many提供免费的混合整数程序求解器。

关于algorithm - 找到从 limit x 供应商处购买 p 产品的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133755/

相关文章:

algorithm - 如何在恒定时间内获得具有特定优先级的堆数组中元素的位置?

algorithm - 非递归深度优先搜索算法

多维优化/寻根/某物的算法

algorithm - 在记忆化的情况下,复杂度如何从 O(2^n) 降低到 O(n^2)?

python - 改进归并排序

python - 根据连续项目的相似性对双边项目列表进行排序

javascript - 从 JavaScript 更新属性并删除数组中的重复元素

algorithm - BFS 和 DFS 算法有什么区别?

C++ 使用自定义权重 boost prim 的算法?

algorithm - 完整加权网络中的社区检测