Сегодня набрел на топик, решил отписать Автору, но объем не влез в комментарий. По ходу в excel-е наваялся калькулятор, который очень наглядно демонстрирует весь механизм и может помочь в подборе необходимых коэффициентов (картинка оттуда, а все остальное под катом).
Ссылка на файл: http://goo.gl/oWgR9Z Файл с макросами, поэтому excel может ругнуться.
Ну и по порядку.
Рейтинг и сила (блога, пользователя) рассчитывается по формуле:
delta = min + log10(skill + 1) * max / log(maxSkill)
Я упростил формулу для наглядности. По ней видно, что дельта рейтинга (силы) увеличивается на десятичный логарифм значения skil и нормируется, что бы попасть в диапазон min-max – максимального и минимального допустимого значения силы.
К значению skil добавляется 1 для того, что бы получилось положительный результат. Вычисленная дельта добавляется к текущему рейтингу, если голосовали «За» и вычитается из него, если голосовали против.
Само значение skill берется как некоторая часть от силы голосующего пользователя. Например при голосовании в профиле пользователя skill рассчитывается следующим образом:
- — если сила голосующего от 0 до 50 – skill = сила / 70;
- — если сила голосующего от 50 до 200 – skill = сила / 40;
- — если сила голосующего от 200 и выше – skill = сила / 2;
В механизме голосования есть особенность:
- При голосовании за комментарий Автору начисляется только Сила;
- При голосовании за топик Автору начисляется и Сила и Рейтинг.
- При голосовании за блог Владельцу блога ничего в зачет не идет – увеличивается только Рейтинг блога.
- При голосовании в профиле за пользователя увеличивается только рейтинг пользователя.
Механизм вроде простой, но при каждом виде голосования свои весовые коэффициенты и результат голосования разный. Что бы разобраться в этом я сделал excel-документ с расчетами. Как им пользоваться?
В верхней части листа кнопки, которые подставляют коэффициенты соответствующего типа голосования, используемые по умолчанию, в таблицу ниже.
Справа находится график, где о оси Х расположена линейка силы голосующего, а по оси Y значение дельты при выбранных коэффициентах.
Слева таблица коэффициентов. Из этой таблицы берутся данные для графика. Что они означают:
Входные данные
- 1. Сила голосующего пользователя – сила пользователя который голосует за топик, автора, блог, комментарий.
- 2. Голосуем за или против – собственно, направление голосования.
Эти данные приходят от пользователя и обрисованы на странице зеленым. При их изменении таблица пересчитывается и в самом низу, светло-зеленым выделен результат голосования, который пойдет в зачет Автору.
Расчет
В этом блоке представлены три части показателей:
- – желтым – те коэффициенты, которые можно изменить в коде модуля Rating, тем самым более тонко настроив систему голосования под свой проект;
- — светло-серым – промежуточные переменные при расчете итоговых показателей;
- — светло-зеленым – итоговые показатели, идущие в зачет Автору или блогу.
- 3. Значение минимально возможного изменения – минимальное значение дельты. Если расчетная дельта будет меньше, то она обнулится.
- 4. Значение максимально возможного изменения – больше этого значения дельта не будет.
- 5. Максимальный рейтинг голосующего – значение для нормировки. Предполагается, что это значение, умноженное на «Делитель правого диапазона (см. ниже)» даст рейтинг пользователя при котором дельта будет максимальной (немножко подробнее в комментарии https://altocms.ru/blog/inside/509.html#comment8304).
Следующие блок значений определяет диапазоны силы голосующего и их повышающие коэффициенты. Все возможные значений силы голосующего делятся на три части (по умолчанию это диапазоны до 50, от 50 до 200, от 200 и выше). Когда пользователь голосует за что-либо происходит оценка его силы на предмет попадания в один из этих диапазонов. Все следующие пояснения основаны на дианазонах ..-50-200-…. Эти диапазоны отчетливо видны на графике.
- 6. Делитель левого диапазона – если сила пользователя меньше 50 и значение этого показателя 100 то для расчета будет браться одна сотая его силы.
- 7. Делитель среднего диапазона – если сила пользователя от 50 до 200 и значение этого показателя 70 то для расчета будет браться одна семядисятая его силы.
- 8. Делитель правого диапазона – если сила пользователя от 200 и выше и значение этого показателя 10 то для расчета будет браться одна десятая его силы.
Итоговые показатели
- 9. Рейтинг силы Автора топика – то значение, которое добавится к рейтингу Автора за его топик.
- 10. Дельта силы Автора топика – то значение, которое добавится к силе Автора при голосовании за его комментарий, топик или самого Автора.
Изменение рейтинга топика в зависимости от силы голосующего
Немного по другому дело обстоит с рейтингом топика. Здесь в зависимости от силы голосующего рейтинг топика увеличивается на одно из четырех значенй (по умолчанию 1-2-3-4).
Сами диапазоны и их весовые коэффициенты настраиваются аналогично предыдущей таблице.
Пересчет рейтинга блогов
Для формирования рейтинга блога можно использовать механизм принудительного пересчета рейтинга блога. Запускается он в админке, в инструментах. При этом формируется новый показатель рейтинга блога по следующей формуле:
rating = R*k1 + U*k2 + T*k3
В этой формуле:
- R — cумма рейтинга всех топиков блога;
- U — количество подписчиков в блоге;
- T — количество топиков в блоге;
- k1 — значение $config['module']['rating']['blog']['topic_rating_sum'] конфига;
- k2 — значение $config['module']['rating']['blog']['count_users'] конфига;
- k2 — значение $config['module']['rating']['blog']['topic_count'] конфига;
Вот и всё.
Всем удачной работы!
24 комментария
Немного не понял только вот этот момент
Речь ведь идет о силе? Если я беру это значение 500 * 10 (делитель правого диапазона) = 5000, а затем пытаюсь подставлять значения 5000, 8000, то вижу, что дельта силы или дельта рейтинга все равно продолжает расти. Это просто в экселе не учтено или я не правильно понял?
Тут вот в чем дело — объясню на примере: Пусть некоторый человек работает в организации и у него в трудовом договоре написано, что он получает 500рублей оклада и 5 премий по 100рублей, ну, в зависимости от того, как он поработал. Пусть в этом месяце он заработал 800 рублей — это значит он выполнил норму на 80%. Почему, а потому, что:
1000рублей — 100%
800рублей — Х%
Отсюда: Х=800*100/1000=80(%), где 1000 — максимум того, что человек может заработать.
Теперь ситуация: этот человек спас от банкротства компанию и ему зачислили дополнительную премию — 100рублей, но и всю свою работу он выполнил полностью и получилось, что он выполнил норму на 110%
Применительно к текущему вопросу: Да Вы всё правильно поняли и рейтинг 5000 — максимальный при котором будет достигнут верхний порог диапазона дельты, но никто не запрещает пользователю получить и 10000 рейтинга, в этом случае будет просто 200% дельты.
У этого коэффициента есть и математический смысл — он масштабирует график по оси Y
кажется я понял, что просто при 5000 дельта совпадает с параметром «Значение максимально возможного изменения», но тем не менее по факту получается дельта продолжает расти и не имеет максимума…
Тогда получается что вот этот пункт не работает
На Вашем примере: рейтинг 5000 — фактически недостижим и я не думаю, что кто-то и за 10 лет работы сайта его перейдет, посмотрите на рейтинги пользователей любого сайта LS или Alto. Я думаю, по этой причине его принудительно и не ограничили. Поэтому, опять же, мое мнение, эти коэффициенты и нужно понимать как верхняя граница дельты и максимально возможный рейтинг пользователя (с учетом делителя диапазона, конечно)
Кстати а в какой момент и откуда запускается процедура пересчета рейтинга блогов?
Упс… пропустил.
Обновил топик, ответ там.
У меня пользователь с отрицательным рейтингом (-1) не может писать в свой личный блог.
Вот в конфиге по-умолчанию уставлен параметр
Но думаю, что он тут ни при чём.
Базу конвертировал вручную из другого движка, мог где-то накосячить, но надо сначала исключить варианты с настройками в конфиге.
— 'Пытаетесь разместить статью в неизвестный блог?',
— 'Вы не состоите в этом блоге!',
— 'Вы еще недостаточно окрепли, чтобы постить в этот блог',
— 'Вы не можете писать в этот блог',
Если выставить вручную рейтинг в 0, то в списке появляется личный блог.
Если рейтинг 0 поставить — он в списке появляется.
В настройках персонального блога устанавливается только лимит рейтинга для комментирования…
Настройка «могут создавать пользователи» кстати для персональных блогов не действует. Можете проверить.