Я ищу хорошую рекомендацию алгоритма.
У меня есть пользователи и достижения. Пользователи создают достижения, а затем передают их другим пользователям. С каждым достижением связано значение балла, которое указывает пользователь. Общее количество очков пользователя - это сумма всех его достижений.
В основном:
Achievement :
owner = Alias
points = int
User :
achievements = list(Achievement)
def points() :
sum([achievements.points])
Итак, эта система, очевидно, очень способна к игре. Вы можете сделать много счетов и дать кучу достижений друг другу. Я пытаюсь немного уменьшить это, масштабируя значения точек чем-то отличным от указанного пользователем.
- Предполагая, что все пользователи честны, но они просто по-разному оценивают. Как мне нормализовать баллы? АКА один пользователь дает 5 баллов за каждое простое достижение, а другой дает 10 баллов, как я могу их нормализовать к одному значению. Целью будет распределение, в котором баллы пропорциональны сложности.
- Если один пользователь не очень хорошо оценивает баллы, как я могу определить сложность на основе количества пользователей, которые получили достижение?
- Предположим, что пользователи могут быть в основном разделены на непересекающиеся группы, где один пользователь дает достижения целому ряду других. Помогает ли это двум предыдущим алгоритмам? Например, пользователь А дает достижения только тем пользователям, которые заканчиваются нечетным числом, а пользователь Б - только достижениям пользователей, заканчивающимся четным числом.
- Если все злоумышленники, насколько я могу приблизиться к тому, чтобы у пользователя не было возможности завышать свои баллы?
Примечание : Качество дающего пользователя никак не связано с тем, сколько достижений он получил. Многие дарители - это просто боты, которые сами ничего не получили, но автоматически награждают пользователей за выполнение определенных действий.
Мой текущий план примерно такой. У меня есть распределение 10 очков / человек, который получил от меня достижение. Если я выдал 10 достижений в общей сложности 55 людям, мое распределение составляет 550. Затем это дается каждому достижению в зависимости от количества людей, которые его получили. Если бы распределение составляло [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
людей, которые получили каждое достижение, тогда значения баллов были бы [50, 25, 16.6, 12.5, 10, 8.3, 7.1, 6.25, 5.5, 5]
.
Любые проблемы с моим подходом и альтернативными рекомендациями приветствуются и приветствуются. Кроме того, опубликуйте другие случаи, о которых вы можете подумать, что я пропустил, и я добавлю их в список. Спасибо!