-4

在算法上为许多客户比较多种价格选项的重述,几乎没有太多的麻烦。

我们有 1,000,000 名客户。每种商品的销售成本可以表示为价格 A 或价格 B。

价格 A << 价格 B。

价格 A 和价格 B 彼此之间不是线性的。在某些情况下,B 的价格是其 2 倍,在某些情况下是 100 倍。

A 上所有客户的成本为

min( (sum(A)/count(A)) , 100 ) * count(A)

实际上,如果 A 上所有客户的平均成本小于 100,则将四舍五入到 100。

B没有这样的限制。

我想在他们的商品上花最少的钱。

如何最大化

cost=min( (sum(A)/count(A)) , 100 ) * count(A) + sum(B)

我一直认为这是双背包问题的一种形式,但我做错了......

我很可能会在 Python 中解决这个问题,尽管我怀疑这很重要。

我已经通过为 xyz 分配分数并基于此进行过滤来进行手动分析,我对更多的计算解决方案感兴趣。

有什么方法可以推荐吗?

4

1 回答 1

0

每个客户可以分配到 A 方或 B 方。如果我把最好的解决方案交给您,您会发现您无法通过更改任何单个客户的分配来改进它。鉴于此,有两种情况需要检查,如果我可以忽略边界情况:

1)最佳方案中A方客户的平均成本至少为100,因此最低价格不生效。如果我将客户从 A 切换到 B,反之亦然,则成本会因该客户的 A 和 B 价格差异而变化。由于我有一个完美的解决方案,因此必须将每个客户分配给 A 或 B 成本较低的那个,这在您的情况下意味着每个人都去 A。

2) 每个客户的最低 100 费用在 A 方生效,因此从 A 和 B 更改客户或反之亦然等于向他们收取 A 100 的成本。由于我有一个完美的解决方案,所以 A 上的客户方必须是B价格在100以上的客户,B方的客户必须是B价格在100以下的客户。

这里唯一的问题是切换客户是否意味着最低 100 条生效或停止生效。在情况 (1) 中,如果有人切换到 B,即使没有最低 A 价格生效,价格也会上涨,所以这不会发生。在情况(2)中,如果 B 方客户切换到 A,这只会让事情变得更糟,因为他们的 B 价格是 100 或更低,所以他们的 A 价格必须是 100 或更低。A 客户的 B 价格必须为 100 或更高。如果他们的 A 价格为 100 或更高,他们绝对应该留在 A,因为将他们移至 B 不能使最低 A 成本停止适用。如果他们的 A 价格是 <

所以我认为你计算出两种可能性的成本 - 案例 1 是将所有东西分配给 A 的地方,案例 2 是将东西分配给 A 的地方,其中 B 的价格为 100 或更多。选择其中最便宜的。

于 2013-10-18T18:42:24.700 回答