|
|
|
| Все наверное играли в игры и все знают, что в играх, где у каждого свой персонаж, есть такой пункт как опыт и уровень персонажа. Когда накапливается определенное кол-во опыта происходит левел ап. Сегодня уровень мы отбросим, рассмотрим опыт.
Сразу оговорюсь, я пишу не игру, а сайт, на котором у каждого будет авторитет. И етот авторитет смогут поднимать или опускать другие юзеры.
Вот как я это описал своему коллеге:
---------
В общих чертах так:
К примеру к моему посту юзер поставил положительную оценку.
# изначально оценка равна 1
$authority = 1;
# Представим, что рейтинг юзера, которы поставил положительную оценку равен 34,53
$valuation_authority = 34,53;
# А мой рейтинг 16,12
$my_authority = 16,12;
# Вычитаем из рейтинга рейтингующего мой рейтинг
$difference_authority = $valuation_authority - $my_authority;
# Теперь (ещё не асили как) вычитаем процент разницы в рейтингах (это надо грамотно продумать, так как разница может быть большая, если мой рейтинг 12, а рейтинг рейтингующего 149 то будет ппц.
calculus
# теперь к примеру получаем 0,45
$add_authority = 0,45;
# И это мы прибавляем к моему рейтинг
$my_authority += $add_authority;
--
Тем самым, получается как в играх, если ты большого левла и убиваешь моба с меньшем левлом, то получаешь мало опыта, и наоборот.
-------
Я обратился на форум, так как не могу не как сообразить как сделать пункт:
# Теперь (ещё не асили как) вычитаем процент разницы в рейтингах (это надо грамотно продумать, так как разница может быть большая, если мой рейтинг 12, а рейтинг рейтингующего 149 то будет ппц.
Загвоздка в том, что рейтинг не имеет придела и он может быть как 2,34 так и 4765,43. Но прибавлять рейтинг можно только в приделах от 0 до 1.
Как можно реализовать? Нужно чтобы юзеры с маленьким рейтингом(авторитетом) прибавляли очень мало к рейтингу юзера с высоким рейтингом и наоборот. Помогите пожалуйста. | |
|
|
|
|
|
|
|
для: JIEXA
(29.07.2007 в 00:46)
| | Хех, решение найдено:
<?
# изначально оценка равна 1
$authority = 1;
# Представим, что рейтинг юзера, которы поставил положительную оценку равен 34,53
$valuation_authority = 34,53;
# А мой рейтинг 16,12
$my_authority = 16,12;
# Вычитаем кол-во рейтинга которое прибавится мне
$add_authority = 1/(1+ 10 * ($valuation_authority - $my_authority)/400);
# И это мы прибавляем к моему рейтинг
$my_authority += $add_authority;
?>
|
| |
|
|
|
|
|
|
|
для: JIEXA
(29.07.2007 в 01:07)
| | Не идеальное скажем так решение.
вот ваш код:
<?
# изначально оценка равна 1
$authority = 1;
# Представим, что рейтинг юзера, которы поставил положительную оценку равен 34,53
$valuation_authority = 34,53;
# А мой рейтинг 16,12
$my_authority = 16,12;
# Вычитаем кол-во рейтинга которое прибавится мне
$add_authority = 1/(1+ 10 * ($valuation_authority - $my_authority)/400);
# И это мы прибавляем к моему рейтинг
$my_authority += $add_authority;
?>
|
Допустим что $valuation_authority = 10, а $my_authority = 50
Подставляем в уравнение:
1 / (1 + 10 * (10-50)/400) = 1 / (1+10*-0.1) = 1 / (1 + -1) = 1 / 0 = ППЦ;
Хотя если "ППЦ" нормально к $my_authority прибавляется то тогда решение сойдет :))))
P.S.
А если в данном случаи $my_authority взять не 50, а скажем 60 то результат вообще с минусом получиться. | |
|
|
|
|
|
|
|
для: testdriver
(29.07.2007 в 01:37)
| | Хм...
нужно авторитет выставлять так:
если авторитет == авторитету ставящего, то балл = 1
если авторитет в 2 раза меньше авторитета ставящего , то бал в 2 раза больше
и наооборот.....
на матем. примере:
С = 1
X = Авторитет ставящего X!=0 && X>0
Y = Авторитет которому ставят оценку Y!=0 && Y>0
F = X / Y отношение авторитетов
Y = C+C*F надбавка к авторитету | |
|
|
|
|
|
|
|
для: deman-b
(29.07.2007 в 03:04)
| | а не проще сделать так:
у меня 50 баллов -> могу добавить 1
100 баллов -> могу добавить до 2
150 баллов -> могу добавить до 3баллов
и т.д. | |
|
|
|
|
|
|
|
для: deman-b
(29.07.2007 в 03:04)
| | - | |
|
|
|
|
|
|
|
для: testdriver
(29.07.2007 в 01:37)
| | Хм, формула поидее универсальная и много где используется... надо думать. | |
|
|
|
|
|
|
|
для: JIEXA
(29.07.2007 в 01:07)
| | 1) десять в степени, а не умножить
2) по этой формуле расчитывается ожидаемое количество очков (ниже другая формула)
3) На текущий уровень все же придется смотреть: K: коэффициент, значение которого равно 10 для сильнейших игроков (рейтинг 2400 и выше), 15 для игроков с рейтингом меньше чем 2400 и 25 для новых игроков
Хотя у себя потыкал c k=10 - вроде ниче) | |
|
|
|
|
|
|
|
для: JIEXA
(29.07.2007 в 01:07)
| | Я думаю так более правильно:
$e = 1/(1 + pow(10,($your - $my)/400));
$newmy = $my + $k*($f - $e);
Где $your - уважение того кто ставит оценку.
$my - уважение того кому ставят оценку.
$k - коэффициент как в формуле т.е. например если пользователь зарегился более 3 месяцев назад то 10, менее 3 мес но более 1 мес то 15, ну и новичкам 25.
$f - если положительная оценка то 1, если отрицательная то 0. | |
|
|
|