按店铺等级分配物品:优化分配梯度的技术方案咨询
店铺等级物品分配梯度优化方案
任务需求
- 按店铺等级分配物品:等级数字越小(如1级),获得物品越多;等级数字越大(如100级),获得物品越少
- 输入参数:待分配物品总数、店铺等级列表(允许重复,无固定规律,例:
[1,4,40])
当前分配方法及存在问题
当前方法步骤
- 反转等级:用等级总和减去单个等级值,使小等级对应大数值
- 计算各店铺反转等级占反转等级总和的比例
- 用待分配总数乘以该比例得到分配量
效果对比
- 店铺数量较少时效果尚可:
[1, 4, 40] 1 = 147.2 4 = 137.1 40 = 16.7
- 店铺数量较多时,分配梯度趋于平缓,高低等级店铺的分配量差距极小:
[6,3,24,10, 25, 12, 14,35,40, 16,28,29,17,1,26,23,8,10] 1 = 17.7 3 = 17.5 6 = 17.4 8 = 17.3 10 = 17.2 10 = 17.2 12 = 17.1 14 = 16.9 16 = 16.8 17 = 16.8 23 = 16.5 24 = 16.4 25 = 16.4 26 = 16.3 28 = 16.2 29 = 16.1 35 = 15.8 40 = 15.5
优化方案:添加梯度控制因子
核心思路:对反转后的等级值进行幂运算,通过调整幂次(控制因子)控制分配曲线的弯曲程度——因子越大,梯度越明显,低等级店铺的分配量优势越突出。该方案无需依赖第三方库,可直接转换为Excel VBA代码。
优化步骤
- 反转等级:用最高等级+1减去单个等级值(避免最高等级反转后为0)
- 对反转后的等级值进行幂运算,幂次为控制因子
factor - 计算各店铺处理后的值占总和的比例,再乘以待分配总数得到分配量
原Python实现代码
number = 301 ranks = [6,3,24,10, 25, 12, 14,35,40, 16,28,29,17,1,26,23,8,10] # ranks = [1,4,40] ranks.sort() total = sum(ranks) tmp = 0 reversed_list = [] for value in ranks: reversed_list.append(total - value) total = sum(reversed_list) print('Items per rank:') for i in range(len(ranks)): percent = reversed_list[i] / total print(str(ranks[i]) + ' = ' + "{:10.1f}".format(percent * number)) tmp = tmp + percent * number print('') print('Total = ' + str(tmp))
优化后Python实现代码
number = 301 ranks = [6,3,24,10, 25, 12, 14,35,40, 16,28,29,17,1,26,23,8,10] # ranks = [1,4,40] factor = 2 # 调整此值控制梯度:值越大,低等级店铺分配优势越明显 ranks.sort() tmp = 0 max_rank = max(ranks) + 1 reversed_values = [] for value in ranks: reversed_value = max_rank - value reversed_value = pow(reversed_value, factor) reversed_values.append(reversed_value) total = sum(reversed_values) print('Items per rank:') for i in range(len(ranks)): percent = reversed_values[i] / total value = percent * number print(str(ranks[i]) + ' = ' + "{:10.1f}".format(value)) tmp = tmp + value print('') print('Total = ' + str(tmp))
内容的提问来源于stack exchange,提问作者Andrey Marchuk
相关产品推荐
相关产品推荐

