在给出一个价值表的情况下,在“团购”中寻找最佳“交易”

时间:2010-11-02 20:15:20

标签: php python math

使用 PHP Python ,但我确信基本功能是不可知的。

我不确定正确的术语,数学理论或算法是什么,否则我肯定Google会在几分钟内为我解决这个问题。

我有一个类似于以下的数据集:

cost | qty | ppl | store
------------------------
   30|  500|   10|     1
   40|  600|   12|     2
   35|  500|   14|     3
   50|  700|   10|     1
   30|  700|   12|     1
   40|  250|   14|     2

我要做的是根据这些限定符找到“最佳”行:

  • 成本:越低越好。
  • 数量:越高越好。
  • ppl:越低越好。
  • store:在这种情况下无关紧要,但后来用于根据“商店”找到“最佳”。

基本上,我试图在“团购”的情况下找到最好的特定“交易”,其中需要最少数量的人才能获得最佳“价值”(数量 - 成本 - 成本)。

在我看来,由于数量的增加,最好的整体将是第5行。

如果有这个名称,以及关于这个主题的好文章(维基百科?),我很乐意自己完成。谢谢你的时间!

3 个答案:

答案 0 :(得分:5)

计算qty / (cost * ppl)并按该数字对列表进行排序。较高qty及较低costppl的此数字会更高。

你可能想要使用这样的东西(python):

def cmp(a, b):
    return (a["qty"] / (a["cost"] * a["ppl"])) - (b["qty"] / (b["cost"] * b["ppl"]))

list = sorted(list, cmp)

解释:想一想qtycost * ppl不变时变大的情况会发生什么。该比率将增加,因为a/x > b>x如果a > b。现在有了另外两个价值观,反之亦然;如果x/a > x/b,那么a < b,那么当costppl增加时,这个比率实际上会降低 <(想想如果你拆分100美元会发生什么)对于两个人对三个人;如果你将它分成两个,每个将得到100/2 = 50 $。如果你把它分成三个,每个将得到100 / 3~ = 33 $,这更少)。 (对不起,如果我说得不够清楚;我累了)

答案 1 :(得分:1)

您正在查看linear programming,特别是simplex algorithm

答案 2 :(得分:0)

你需要决定什么使它最优,定义一个取决于成本,数量,ppl的函数,并最大化/最小化它。然后它只是优化。

我假设成本是每件商品的成本,数量是商店中可用的数量,而ppl是团购的最小人数。然后最小化成本* ppl / qty相当于最小化花费的最小总金额在它开始之前,除以可以参加团购的人数。但你还是要考虑这是否有意义。你可能会说,如果成本增加一倍,但可用的数量也会增加一倍,因为这个团购比一个小团购还差。也许如果成本翻倍,数量必须增加4,或者必需的数量减少4,那么你可能需要像cost ^ 2 ppl / qty这样的函数。例如,一般的东西,如成本^ m ppl ^ n / qty ^ p应该工作;你只需根据你认为合适的权重调整m,n,p(所有正数)。