选择集合元素以实现平均价格的算法

Algorithm to pick elements of collection to achieve average price

我需要解决以下问题:

我有一系列附有价格的商品,我需要选择给定的数量以达到给定的加权平均价格。

例如。

我可以将相同价格的数量分组以更好地理解:

price    qty
.00    60
.04    80
[=10=].99    55
.10    130   

现在我需要从每个箱子中选择我需要多少元素才能以平均价格达到 100 个元素 = 1.035

你知道不用暴力组合的求近似解的算法吗? - 我也是时间紧迫。

它看起来有点像背包算法,虽然我不确定我必须使用的约束。

谢谢

这是一个整数线性规划问题。

将其表示为线性规划问题意味着变量 abcda+b+c+d=100 以及 a*1+b*1.04+c*0.99+d*1.10=1.035*1000<=a<=600<=b<=800<=c<=550<=d<=130.

你没有明说,但应该是整数解(即买的数量必须是整数),所以是整数线性规划问题,而不是线性规划问题。虽然 ILP 问题通常是 NP-hard 问题,但您可以在网上找到可以轻松解决这个小问题的求解器和算法。例如,尝试 GLPK。

另请注意,蛮力在这里很有效; a,b,c,d 只有 176851 种组合可供尝试。