2011-04-10 81 views
6

我從PHPClasses網站獲得了以下ELO類。PHP Facemash ELO評級分類/功能

<?php 
class elo_calculator { 
    public function rating($S1, $S2, $R1, $R2) { 
     if(empty($S1) or empty($S2) or empty($R1) or empty($R2)) 
      return null; 
     if($S1 != $S2) { 
      if($S1 > $S2) { 
       $E = 120 - round(1/(1 + pow(10, (($R2 - $R1)/400))) * 120); 
       $R['R3'] = $R1 + $E; 
       $R['R4'] = $R2 - $E; 
      } else { 
       $E = 120 - round(1/(1 + pow(10, (($R1 - $R2)/400))) * 120); 
       $R['R3'] = $R1 - $E; 
       $R['R4'] = $R2 + $E; 
      } 
     } else { 
      if($R1 == $R2) { 
       $R['R3'] = $R1; 
       $R['R4'] = $R2; 
      } else { 
       if($R1 > $R2) { 
        $E = (120 - round(1/(1 + pow(10, (($R1 - $R2)/400))) * 120)) - (120 - round(1/(1 + pow(10, (($R2 - $R1)/400))) * 120)); 
        $R['R3'] = $R1 - $E; 
        $R['R4'] = $R2 + $E; 
       } else { 
        $E = (120 - round(1/(1 + pow(10, (($R2 - $R1)/400))) * 120)) - (120 - round(1/(1 + pow(10, (($R1 - $R2)/400))) * 120)); 
        $R['R3'] = $R1 + $E; 
        $R['R4'] = $R2 - $E; 
       } 
      } 
     } 
     $R['S1'] = $S1; 
     $R['S2'] = $S2; 
     $R['R1'] = $R1; 
     $R['R2'] = $R2; 
     $R['P1'] = ((($R['R3'] - $R['R1']) > 0)?"+" . ($R['R3'] - $R['R1']) : ($R['R3'] - $R['R1'])); 
     $R['P2'] = ((($R['R4'] - $R['R2']) > 0)?"+" . ($R['R4'] - $R['R2']) : ($R['R4'] - $R['R2'])); 
     return $R; 
    } 
} 
?> 

我想把這個應用到我的食品評級網站。

這裏是我的理解

  1. 要使用我們需要分配基本分數爲所有的菜系統開始。
  2. 我們有4個變量S1,S2,R1,R2(S =分數,R =等級)
  3. 當兩盤之間的評分如果我按第一道菜。什麼是S1和S2?它會是1-0?
  4. 如果我在10K戰鬥後添加另一道菜怎麼辦?因爲我會爲它分配一個基本分數會更好嗎?
  5. 我如何阻止盤的比分不走低於0

這裏是PHP執行相同的。你能幫我理解4個變量嗎?我應該如何使用它?

+1

我發現後面的等級分非常有用的數學理論。它很容易實現它像描述http://en.wikipedia.org/wiki/Elo_rating#Theory – LumpN 2011-04-10 08:54:47

+1

檢查此問題:http://stackoverflow.com/questions/3848004/facemash-algorithm – tradyblix 2011-04-10 09:20:16

+0

@LumpN我檢查出來。我對使用中的變量以及它們的含義有些困惑。將更新我的帖子。 Plz看看。 @tradyblix謝謝。實施它有點麻煩。將更新我的文章 – 2011-04-10 09:38:35

回答

5

這裏GitHub上是最好的PHP類爲等級分我曾經發現:https://github.com/Chovanec/elo-rating

用法:

// player A elo = 1000 
// player B elo = 2000 
// player A lost 
// player B win 
$raging = new Rating(1000, 2000, 0, 1); 

// player A elo = 1000 
// player B elo = 2000 
// player A draw 
// player B draw 
$raging = new Rating(1000, 2000, .5, .5); 
1

1.S1應該是第一盤的當前得分和S2爲正在與

2.R1比較所述第二盤是當前盤的秩和R2是所述第二盤的當前的秩

2,如果其不公平這一系統將不會在全球遊戲

3.you使用可能要使用一個數據庫來保存分數所以可以說,它應該是這樣的

if($elo_calcualtor->rating(1,2,1,2)['p1'] < 0){$current_dish_score = 0;} 

終於 你應該從十使得評級開始,所以它不會小於0,最有可能將不能高於20

希望這有助於