2012-02-11 8 views
1

私はPHPでベイジアン・レーティング・システムに取り組んでいますが、半分しか動作しません。他のメンバーの大部分が高い格付けを与えているなどの理由で、評価が低いと評価されています。これまでには私は年齢を取っていましたが、今は完全に困惑しています。PHPベイジアン・レーティング・システム(人気投票に基づく)

これは、データベースエントリを設定する前に、数学を理解するためのテストスクリプトです(私は数学ではあまりよくありません)。

<?php 

// Item 1 votes 
$ratings[0][1] = 10; 
$ratings[0][2] = 4; 
$ratings[0][3] = 1; 
$ratings[0][4] = 72; 
$ratings[0][5] = 853;  // z0mg, lots of people think this is 5 star material! 

// Item 2 votes - it's 50:50, rating should be 3 
$ratings[1][1] = 1000; 
$ratings[1][2] = 1; 
$ratings[1][3] = 1; 
$ratings[1][4] = 1; 
$ratings[1][5] = 1000; 

// Item 3 votes - should also be 3 
$ratings[2][1] = 1000; 
$ratings[2][2] = 1000; 
$ratings[2][3] = 1000; 
$ratings[2][4] = 1000; 
$ratings[2][5] = 1000; 

// Item 4 votes - obviously the best thing ever 
$ratings[3][1] = 0; 
$ratings[3][2] = 0; 
$ratings[3][3] = 0; 
$ratings[3][4] = 0; 
$ratings[3][5] = 99999999999; 

foreach($ratings as $rating) 
{ 
    $total_votes = $rating[1] + $rating[2] + $rating[3] + $rating[4] + $rating[5]; 

    $weight[1] = $rating[1]/$total_votes; 
    $weight[2] = $rating[2]/$total_votes; 
    $weight[3] = $rating[3]/$total_votes; 
    $weight[4] = $rating[4]/$total_votes; 
    $weight[5] = $rating[5]/$total_votes; 

    // 1.0 == $weight[5] + $weight[4] + $weight[3] + $weight[2] + $weight[1]; 

    $yay = $rating[1] * $weight[1]; 
    $yay += $rating[2] * $weight[2]; 
    $yay += $rating[3] * $weight[3]; 
    $yay += $rating[4] * $weight[4]; 
    $yay += $rating[5] * $weight[5]; 

    echo ($yay/$total_votes) * 5; 
    echo "\n"; 
} 

/* 
    RESULTS 
    4.1472951561793 
    2.4925205800884 
    1 
    5 
*/ 

?> 

しかし、もちろん、項目2と3の評価は、両方とも3.0でなければなりません...

ホープ誰かが助けることができます。

+1

何が質問ですか? – rdlowrey

+0

申し訳ありませんが、コードを編集してより明確にしましたが、投稿が失敗し、元に戻しました。 投稿を編集しました... "もちろん、アイテム2とアイテム3のレーティングは両方とも3.0でなければなりません..."。だから私はちょうど何が間違っているか知りたいです とコードの結果は、コメントの一番下にあります – Deji

+0

申し訳ありませんが、jQuery、MySQL、またはAJAXがこのランキング機構に適合する場所は表示されません... – sarnold

答えて

1

これは実際にはPHPの質問ではありません。間違いはアルゴリズムにあります。

とにかく、に変更します

$yay = 1 * $weight[1]; 
$yay += 2 * $weight[2]; 
$yay += 3 * $weight[3]; 
$yay += 4 * $weight[4]; 
$yay += 5 * $weight[5]; 
echo $yay 

が動作するはずです。

+0

大きな感謝! _THIS_COMMENT_NEEDS_TO_BE_LONGER_ – Deji

関連する問題