Если вы пропустили это, я был серьезно связан с рейтингами в последние месяцы. Посмотрите здесь , здесь и здесь для примеров. (это на португальском языке, извините за это …)
Рейтинги могут показаться не такими важными или интересными, но если мы поближе рассмотрим приложения, которые нас окружают, мы увидим, как они используются разными способами.
Как я уже говорил в предыдущей статье:
На самом деле, большинство реализаций рейтинга ошибочны и могут даже сделать ваше приложение менее привлекательным. Достигнуть верхних позиций сложно или просто невозможно, и вы никогда не встретите реальной борьбы с другими пользователями.
Это происходит потому, что используемые нами рейтинговые оценки измеряют историю, а не мастерство пользователей. Я представил решение, которое Microsoft придумала для этой проблемы для XBox:
True Skill — это байесовский алгоритм ранжирования, разработанный Microsoft Research и используемый в системе сопоставлений Xbox, созданной для устранения некоторых выявленных недостатков в системе рейтингов Elo.
TrueSkill — отличное решение. Проблема в том, что он запатентован , но концепции, лежащие в его основе, могут быть использованы для улучшения наших реальных реализаций. Это где Сигма приходит.
Сигма
Sigma — это реализация концепций TrueSkill, написанных на Ruby. Существующий гем предназначен для приложений Ruby on Rails, которые используют Active Record.
Мысль, стоящая за сигмой, заключается в том, что концепция рейтинга делится на две разные переменные: умение пользователя и доверие, которое система ему оказывает. Это позволяет обрабатывать неожиданные результаты более справедливым образом и измерять реальный навык быстрее, чем большинство ранжированных реализаций.
пример
Вот сценарий, где есть 4 игрока, которые уже сыграли много матчей друг против друга. Представьте, как тяжело будет для нового игрока занять верхнюю позицию. На самом деле это один из тестов пользователей Sigma :
100.times { user_1.won (user_1.rating - user_2.rating) user_2.lost (user_2.rating - user_1.rating) user_2.won (user_2.rating - user_3.rating) user_3.lost (user_3.rating - user_2.rating) user_3.won (user_3.rating - user_4.rating) user_4.lost (user_4.rating - user_3.rating) }
Как только все пользователи сыграют 100 матчей, мы получим консолидированный рейтинг.
Появляется новый игрок, и ему придется доказать свое мастерство, чтобы получить конкурентную позицию.
2.times { user_5.won(user_5.rating - user_2.rating) user_2.lost(user_2.rating - user_5.rating) } 2.times { user_5.won(user_5.rating - user_1.rating) user_1.lost(user_1.rating - user_5.rating) }
После всего 4 матчей с лучшими игроками наш новый пользователь достигает вершины рейтинга.
expect(User.ranking.first).to eq user_5
Это иллюстрирует одно из преимуществ работы с рейтингами с использованием этой новой концепции.
использование
Настроить
Sigma действительно проста в использовании и еще более проста в настройке. Все, что вам нужно сделать, это добавить его в свой Gemfile
:
gem 'sigma'
Запустите генератор сигма и ответьте на два дружеских вопроса:
$ rails g sigma What is your resource model? (eg. user) user What will be the scale? (default is 50) 100
Он сгенерирует некоторые миграции, добавит несколько новых атрибутов в вашу модель ресурсов и создаст новый инициализатор с именем sigma.rb
.
Новые атрибуты:
- умение
- сомнение
- победы
- потери
- рисует
- ожидания
методы
Sigma также добавляет некоторые методы в модель, чтобы сделать доступ к информации ранжирования простым. Эти методы:
- рейтинг
- Возвращает рейтинг ресурса, основанный на умении х сомнение.
- позиция
- Возвращает позицию ресурса в рейтинге.
- Спички
- Вернуть целое число с количеством побед, поражений и ничьих.
- победил (сложность)
- Зарегистрируйте выигрыш для ресурса и рассчитайте его рейтинг и ожидания.
- потерянный (сложность)
- Зарегистрируйте убыток для ресурса и рассчитайте его рейтинг и ожидания.
Screencast
Самый простой способ понять сигму — это увидеть ее в действии. Я создал скринкаст, который с нуля показывает, как его настроить и использовать. Это мой первый скринкаст, и он будет наиболее разборчивым, если вы посмотрите его в полноэкранном режиме и в HD. Кроме того, я не являюсь носителем английского языка, поэтому я сделал все, что мог… 🙂
Дайте мне знать, если у вас есть какие-либо вопросы или комментарии о Sigma.