我不确定这是否是问这类问题的正确位置。看起来你正在要求算法或一些标准的业务规则,但最终的代码。
那么,我发布了一种方法来提出新的想法。我构建的算法列表和测试顶级值:
import math
fs = [
('Plain coef', lambda m: math.log(m[1]* units_coef)
+ math.log(m[2]* money_coef) ),
('Coef into log', lambda m: m[1]* units_coef
+ m[2]* money_coef ),
('Coef out log', lambda m: math.log(m[1])* units_coef
+ math.log(m[2]) * money_coef),
('Coef out log2', lambda m: math.log(m[1],2)* units_coef
+ math.log(m[2],2) * money_coef),
]
movings = [ ('product1', 1500, 75.00),
('product2', 2, 90000.00),
('product3', 1200, 8000.00),
('product4', 6, 4000.00),
('product5', 500, 1000.00),
('product6', 800, 1200.00),
('product7', 300, 800.00),
]
units_coef = 1.1
money_coef = 0.04
for (n,f) in fs:
print ''
print n
print '==============================================='
for i in sorted(movings,
key = lambda m: f(m) ,
reverse=True)[:3]:
print i, f(i)
结果:
$ python solds.py
Plain coef
===============================================
('product3', 1200, 8000.0) 12.9537080114
('product6', 800, 1200.0) 10.6511229184
('product5', 500, 1000.0) 9.99879773234
Coef into log
===============================================
('product2', 2, 90000.0) 3602.2
('product1', 1500, 75.0) 1653.0
('product3', 1200, 8000.0) 1640.0
Coef out log
===============================================
('product1', 1500, 75.0) 8.21724195034
('product3', 1200, 8000.0) 8.15857239218
('product6', 800, 1200.0) 7.63667597387
Coef out log2
===============================================
('product1', 1500, 75.0) 11.8549742115
('product3', 1200, 8000.0) 11.7703319309
('product6', 800, 1200.0) 11.0173945564
您需要考虑的第一件事是“正是你想要这些队伍是什么意思”。一种简单的方法是按照上述两种方式对它们进行排序(以增加的方式),并为其指定一个分数,例如'units_sold_rank * 1.5 + total_money_gathered_rank * 2.0'并根据它进行排序。在你的情况下,产品2将以'1.5'的分数(或'4.0'取决于你是否从'0'或从'1'进行索引),而产品1的得分为'2.0'(或'5.5') – dmg 2013-03-02 14:24:52
你是要求商业算法,而不是代码?如果是,请尝试使用Google搜索引擎优化分析库存搜索,这是常见的技巧,可以根据您的要求进行排名。 – rlb 2013-03-02 20:47:08