【问题标题】:algorithm to distribute points between 3 "buckets"在 3 个“桶”之间分配点的算法
【发布时间】:2019-05-21 23:18:56
【问题描述】:

我正在尝试编写一个算法来在系统中的 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 分)等。

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

【问题讨论】:

  • > 如果我在系统中有 6 条规则,其中 3 条规则设置为高优先级,2 条规则设置为中优先级,4 条规则设置为低优先级 你是说 9 条规则吗?
  • 我做到了。我将编辑问题。
  • 您说的是“Y”权重,但在您的帖子的其余部分中,始终存在三个权重(对应于“高”、“中”和“低”)。这只是一个示例吗?您是否正在寻找一个同时涵盖两个、四个或任何数量权重的解决方案?
  • 我们目前有 3 个权重,但我们可能会在未来添加更多权重,如果可能的话,我希望我的解决方案能够适应。
  • 我可以假设权重不必是简单的 1/2/4 比率吗?

标签: python algorithm sorting


【解决方案1】:

您可以总结您的规则权重 (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)]

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

【讨论】:

  • 这看起来很接近我想要的。你能用一个简短的代码来更新你的答案吗?我无法可视化实现。
  • 这个答案最终给了我解决问题所需的东西。谢谢!
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2021-01-28
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多