首页 > 解决方案 > 在 3 个“桶”之间分配点的算法

问题描述

我正在尝试编写一个算法来在系统中的 X 个规则之间分配 100 个加权点,其中规则具有 Y 个不同的权重之一。例如:

如果我在系统中有 9 条规则,其中 3 条规则设置为高优先级,2 条规则设置为中优先级,4 条规则设置为低优先级,则积分将按如下方式分配:

High (3x) - 20 per rule (60 points)

Med (2x) - 10 per rule (20 points)

Low (4x) - 5 per rule (20 points)

总分 100 分

所有的权重可能并不总是存在。例如,可能有 1 条高规则和 1 条低规则、1 条中等规则(将获得全部 100 分)等。

我一直无法找到一种方法来完成这项工作,部分原因是我不知道这种类型的操作叫什么。任何帮助,将不胜感激。

标签: pythonalgorithmsorting

解决方案


您可以总结您的规则权重 ( S = sum(rule_num[i] * rule_weight[i])) 并将其与 100 进行比较。您应该100/S为每个规则分配分数,而不是为规则分配 1 分。

rule_weights = (20, 10, 5)
rule_counts = (3, 2, 4)
s = sum([w * c for (w, c) in zip(rule_weights, rule_counts)])
assignment = [100 / s * w * c for (w, c) in zip(rule_weights, rule_counts)]

这取决于您在非整数点数的情况下该怎么做。


推荐阅读