我不確定這是否是問這類問題的正確位置。看起來你正在要求算法或一些標準的業務規則,但最終的代碼。
那麼,我發佈了一種方法來提出新的想法。我構建的算法列表和測試頂級值:
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