алгоритм распределения точек между 3 "ведрами" - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь написать алгоритм для распределения 100 весовых точек между X количеством правил в системе, где правила имеют один из 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 баллов) и т. Д.Я не знаю, как называется этот тип операции.Любая помощь будет оценена.

1 Ответ

2 голосов
/ 22 мая 2019

Вы можете суммировать веса ваших правил (S = sum(rule_num[i] * rule_weight[i])) и сравнивать их со 100. Вместо назначения 1 балла правилу вы должны назначить 100/S баллов за правило.

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)]

Вам решать, что делать в случае нецелого числа баллов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...