В настоящее время я строю систему, которая требует ранжирования на основе внутреннего действий/оценки. Сам счет может варьироваться от любого места в пределах от 0 до 20000.Logarithmic Scale - Рейтинг в PHP
Мне нужна функция, которую я создаю, чтобы ранжировать пользователей, чтобы вернуть значение между 1-100. Если это невозможно, было бы неплохо вернуть любые результирующие множества более 100 как 100. В настоящее время у меня возникают трудности с созданием логарифмического алгоритма определения баллов.
Я попытался следующие функции:
echo 1 + sqrt(500 + 2000 * $score)/50;
Однако результаты этого возвращения не изменяются достаточно для более низких значений и экспоненциально возрастают для более высоких.
Пример входных баллов при низкой/средней части шкалы являются:
- 0,15
Пример входных данных на высоком конце шкалы
- 236,4
- 17899,70
Любая помощь будет принята с благодарностью. Застрял на этом несколько дней. Вышеприведенная функция - лучшая попытка, которую я имею до сих пор, однако, как известно, недостаточно низкого уровня между средними и средними результатами и слишком большим количеством высших.
Спасибо,
Daniel
Привет @btilly - спасибо за ответ. Это решение, я думаю, потребовало бы, чтобы я получил все пользовательские баллы и запускал их через эту функцию каждый раз, когда добавляю нового пользователя? Потому что каждый ранг определяется на основе других из набора. Это означает, что мне также придется обновлять каждый рейтинг пользователей в базе данных каждый раз, когда будет добавлен новый пользователь. Я надеялся, что при статическом пределе 0 для минимума и 20 000 для максимума я мог бы избежать этого. –
@ DanielBenzie Мое понимание вашего вопроса в том, что вы хотели совместить баллы для разных действий над предметами (например, с пользователем) и выплюнуть число в диапазоне 0-100. Но, похоже, вы хотите вместо этого сохранить процентильные ряды для пользователей, каждый из которых имеет баллы? Вы должны искать дерево статистики заказа. Бриф, созданный в BerkeleyDB с набором 'DB_RECNUM', может сделать это, но не в PHP. См. Https://docs.oracle.com/cd/E17275_01/html/api_reference/C/dbcget.html для интерфейса C. (Вы должны получить пару ключ/значение, а затем получить флаг 'DB_GET_RECNO', чтобы получить ранг.) – btilly