Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Задача для тех, кто понимает хорошо математику.
 
 автор: JIEXA   (29.07.2007 в 00:46)   письмо автору
 
 

Все наверное играли в игры и все знают, что в играх, где у каждого свой персонаж, есть такой пункт как опыт и уровень персонажа. Когда накапливается определенное кол-во опыта происходит левел ап. Сегодня уровень мы отбросим, рассмотрим опыт.
Сразу оговорюсь, я пишу не игру, а сайт, на котором у каждого будет авторитет. И етот авторитет смогут поднимать или опускать другие юзеры.

Вот как я это описал своему коллеге:
---------
В общих чертах так:
К примеру к моему посту юзер поставил положительную оценку.
# изначально оценка равна 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 в 01:07)   письмо автору
 
   для: JIEXA   (29.07.2007 в 00:46)
 

Хех, решение найдено:

<?
# изначально оценка равна 1
$authority 1;
# Представим, что рейтинг юзера, которы поставил положительную оценку равен 34,53
$valuation_authority 34,53;
# А мой рейтинг 16,12
$my_authority 16,12;
# Вычитаем кол-во рейтинга которое прибавится мне
$add_authority 1/(110 * ($valuation_authority $my_authority)/400);
# И это мы прибавляем к моему рейтинг
$my_authority += $add_authority;
?>

   
 
 автор: testdriver   (29.07.2007 в 01:37)   письмо автору
 
   для: JIEXA   (29.07.2007 в 01:07)
 

Не идеальное скажем так решение.
вот ваш код:

<? 
# изначально оценка равна 1 
$authority 1
# Представим, что рейтинг юзера, которы поставил положительную оценку равен 34,53 
$valuation_authority 34,53
# А мой рейтинг 16,12 
$my_authority 16,12
# Вычитаем кол-во рейтинга которое прибавится мне 
$add_authority 1/(110 * ($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 то результат вообще с минусом получиться.

   
 
 автор: deman-b   (29.07.2007 в 03:04)   письмо автору
 
   для: 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 надбавка к авторитету

   
 
 автор: Binura   (29.07.2007 в 06:49)   письмо автору
 
   для: deman-b   (29.07.2007 в 03:04)
 

а не проще сделать так:

у меня 50 баллов -> могу добавить 1
100 баллов -> могу добавить до 2
150 баллов -> могу добавить до 3баллов
и т.д.

   
 
 автор: JIEXA   (29.07.2007 в 12:41)   письмо автору
 
   для: deman-b   (29.07.2007 в 03:04)
 

-

   
 
 автор: JIEXA   (29.07.2007 в 12:42)   письмо автору
 
   для: testdriver   (29.07.2007 в 01:37)
 

Хм, формула поидее универсальная и много где используется... надо думать.

   
 
 автор: kasmanaft   (29.07.2007 в 23:32)   письмо автору
 
   для: JIEXA   (29.07.2007 в 01:07)
 

1) десять в степени, а не умножить
2) по этой формуле расчитывается ожидаемое количество очков (ниже другая формула)
3) На текущий уровень все же придется смотреть: K: коэффициент, значение которого равно 10 для сильнейших игроков (рейтинг 2400 и выше), 15 для игроков с рейтингом меньше чем 2400 и 25 для новых игроков
Хотя у себя потыкал c k=10 - вроде ниче)

   
 
 автор: AxoN   (30.07.2007 в 13:16)   письмо автору
 
   для: 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.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования