Ejemplo n.º 1
0
function g2_test()
{
    $r0 = 1500;
    // Glicko 1 rating
    $RD0 = 350;
    // Glicko 1 rating deviation
    $sigma0 = 0.06;
    // Glicko 2 volatility
    $tau = 0.5;
    // constrains volatility over time
    $epsilon = 1.0E-6;
    $q_inv = 173.7178;
    //400/log(10);
    $mu0 = 0;
    $phi0 = $RD0 / $q_inv;
    // 2players
    $A_mu = g2_from_g1_rating(1500, $r0);
    $A_phi = g2_from_g1_deviation(350);
    $A_sigma = $sigma0;
    $B_mu = g2_from_g1_rating(1500, $r0);
    $B_phi = g2_from_g1_deviation(350);
    $B_sigma = $sigma0;
    $A_r = g2_to_g1_rating($A_mu, $r0);
    $A_RD = g2_to_g1_deviation($A_phi);
    $B_r = g2_to_g1_rating($B_mu, $r0);
    $B_RD = g2_to_g1_deviation($B_phi);
    echo "A mu={$A_mu}, r={$A_r}<br>";
    echo "A phi={$A_phi}, RD={$A_RD}<br>";
    echo "A sigma={$A_sigma}<br>";
    echo "B mu={$B_mu}, r={$B_r}<br>";
    echo "B phi={$B_phi}, RD={$B_RD}<br>";
    echo "B sigma={$B_sigma}<br>";
    echo "-----------------------------------<br>";
    $update_A = glicko2_update($A_mu, $A_phi, $A_sigma, 1, $B_mu, $B_phi, $B_sigma, 2, $tau, $epsilon);
    $update_B = glicko2_update($B_mu, $B_phi, $B_sigma, 2, $A_mu, $A_phi, $A_sigma, 1, $tau, $epsilon);
    $A_mu = $A_mu + $update_A[0];
    $A_phi = $A_phi * $update_A[1];
    $A_sigma = $A_sigma * $update_A[2];
    $B_mu = $B_mu + $update_B[0];
    $B_phi = $B_phi * $update_B[1];
    $B_sigma = $B_sigma * $update_B[2];
    $A_r = g2_to_g1_rating($A_mu, $r0);
    $A_RD = g2_to_g1_deviation($A_phi);
    $B_r = g2_to_g1_rating($B_mu, $r0);
    $B_RD = g2_to_g1_deviation($B_phi);
    echo "---><br>";
    echo "A mu={$A_mu}, r={$A_r}<br>";
    echo "A phi={$A_phi}, RD={$A_RD}<br>";
    echo "A sigma={$A_sigma}<br>";
    echo "B mu={$B_mu}, r={$B_r}<br>";
    echo "B phi={$B_phi}, RD={$B_RD}<br>";
    echo "B sigma={$B_sigma}<br>";
    echo "-----------------------------------<br>";
}
Ejemplo n.º 2
0
 function match_scores_update()
 {
     global $sql;
     // Get event info
     $event_id = $this->fields['Event'];
     $event = new Event($event_id);
     // Initialize scores ELO/TrueSkill/Glicko2
     $deltaELO = 0;
     $deltaTS_mu = 0;
     $deltaTS_sigma = 1;
     $deltaG2_mu = 0;
     $deltaG2_phi = 1;
     $deltaG2_sigma = 1;
     $G2_r0 = $event->getField('G2_default_r');
     $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($deltaELO) . "'," . "     Player_deltaTS_mu = '" . floatToSQL($deltaTS_mu) . "'," . "     Player_deltaTS_sigma = '" . floatToSQL($deltaTS_sigma) . "'," . "     Player_deltaG2_mu = '" . floatToSQL($deltaG2_mu) . "'," . "     Player_deltaG2_phi = '" . floatToSQL($deltaG2_phi) . "'," . "     Player_deltaG2_sigma = '" . floatToSQL($deltaG2_sigma) . "'," . "     Player_Win = 0," . "     Player_Draw = 0," . "     Player_Loss = 0," . "     Player_Points = 0" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')";
     $result = $sql->db_Query($q);
     // Calculate number of players and teams for the match
     $q = "SELECT DISTINCT " . TBL_SCORES . ".Player_MatchTeam" . " FROM " . TBL_SCORES . " WHERE (" . TBL_SCORES . ".MatchID = '" . $this->fields['MatchID'] . "')";
     $result = $sql->db_Query($q);
     $nbr_teams = mysql_numrows($result);
     if ($nbr_teams != 0) {
         // Update scores ELO and TS
         for ($i = 1; $i <= $nbr_teams - 1; $i++) {
             for ($j = $i + 1; $j <= $nbr_teams; $j++) {
                 $output .= "Team {$i} vs. Team {$j}<br />";
                 switch ($event->getMatchPlayersType()) {
                     case 'Players':
                         $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_PLAYERS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_PLAYERS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_PLAYERS . ".PlayerID = " . TBL_SCORES . ".Player)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$i}')";
                         $resultA = $sql->db_Query($q);
                         $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_PLAYERS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_PLAYERS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_PLAYERS . ".PlayerID = " . TBL_SCORES . ".Player)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$j}')";
                         $resultB = $sql->db_Query($q);
                         $NbrPlayersTeamA = mysql_numrows($resultA);
                         $teamA_Rank = mysql_result($resultA, 0, TBL_SCORES . ".Player_Rank");
                         $teamA_Forfeit = mysql_result($resultA, 0, TBL_SCORES . ".Player_Forfeit");
                         $teamA_ELO = 0;
                         $teamA_TS_mu = 0;
                         $teamA_TS_sigma2 = 0;
                         $teamA_G2_r = 0;
                         $teamA_G2_RD2 = 0;
                         $teamA_G2_sigma2 = 0;
                         for ($k = 0; $k < $NbrPlayersTeamA; $k++) {
                             $teamA_ELO += mysql_result($resultA, $k, TBL_PLAYERS . ".ELORanking");
                             $teamA_TS_mu += mysql_result($resultA, $k, TBL_PLAYERS . ".TS_mu");
                             $teamA_TS_sigma2 += pow(mysql_result($resultA, $k, TBL_PLAYERS . ".TS_sigma"), 2);
                             $teamA_G2_r += mysql_result($resultA, $k, TBL_PLAYERS . ".G2_r");
                             $teamA_G2_RD2 += pow(mysql_result($resultA, $k, TBL_PLAYERS . ".G2_RD"), 2);
                             $teamA_G2_sigma2 += pow(mysql_result($resultA, $k, TBL_PLAYERS . ".G2_sigma"), 2);
                         }
                         $teamA_TS_sigma = sqrt($teamA_TS_sigma2);
                         $teamA_G2_RD = sqrt($teamA_G2_RD2);
                         $teamA_G2_sigma = sqrt($teamA_G2_sigma2);
                         $teamA_G2_mu = g2_from_g1_rating($teamA_G2_r, $G2_r0, G2_qinv);
                         $teamA_G2_phi = g2_from_g1_deviation($teamA_G2_RD, G2_qinv);
                         $output .= "Team {$i} ELO: {$teamA_ELO}, rank: {$teamA_Rank}<br />";
                         $output .= "Team {$i} TS: mu = {$teamA_TS_mu}, sigma= {$teamA_TS_sigma}<br />";
                         $output .= "Team {$i} TS: mu = {$teamA_TS_mu}, sigma= {$teamA_TS_sigma}<br />";
                         $output .= "Team {$i} G2: mu = {$teamA_G2_mu}, phi= {$teamA_G2_phi}, sigma= {$teamA_G2_sigma}<br />";
                         $NbrPlayersTeamB = mysql_numrows($resultB);
                         $teamB_Rank = mysql_result($resultB, 0, TBL_SCORES . ".Player_Rank");
                         $teamB_Forfeit = mysql_result($resultB, 0, TBL_SCORES . ".Player_Forfeit");
                         $teamB_ELO = 0;
                         $teamB_TS_mu = 0;
                         $teamB_TS_sigma2 = 0;
                         $teamB_G2_r = 0;
                         $teamB_G2_RD2 = 0;
                         $teamB_G2_sigma2 = 0;
                         for ($k = 0; $k < $NbrPlayersTeamB; $k++) {
                             $teamB_ELO += mysql_result($resultB, $k, TBL_PLAYERS . ".ELORanking");
                             $teamB_TS_mu += mysql_result($resultB, $k, TBL_PLAYERS . ".TS_mu");
                             $teamB_TS_sigma2 += pow(mysql_result($resultB, $k, TBL_PLAYERS . ".TS_sigma"), 2);
                             $teamB_G2_r += mysql_result($resultB, $k, TBL_PLAYERS . ".G2_r");
                             $teamB_G2_RD2 += pow(mysql_result($resultB, $k, TBL_PLAYERS . ".G2_RD"), 2);
                             $teamB_G2_sigma2 += pow(mysql_result($resultB, $k, TBL_PLAYERS . ".G2_sigma"), 2);
                         }
                         $teamB_TS_sigma = sqrt($teamB_TS_sigma2);
                         $teamB_G2_RD = sqrt($teamB_G2_RD2);
                         $teamB_G2_sigma = sqrt($teamB_G2_sigma2);
                         $teamB_G2_mu = g2_from_g1_rating($teamB_G2_r, $G2_r0, G2_qinv);
                         $teamB_G2_phi = g2_from_g1_deviation($teamB_G2_RD, G2_qinv);
                         $output .= "Team {$j} ELO: {$teamB_ELO}, rank: {$teamB_Rank}<br />";
                         $output .= "Team {$j} TS: mu = {$teamB_TS_mu}, sigma= {$teamB_TS_sigma}<br />";
                         $output .= "Team {$j} G2: mu = {$teamB_G2_mu}, phi= {$teamB_G2_phi}, sigma= {$teamB_G2_sigma}<br />";
                         break;
                     case 'Teams':
                         $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_TEAMS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_TEAMS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_TEAMS . ".TeamID = " . TBL_SCORES . ".Team)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$i}')";
                         $resultA = $sql->db_Query($q);
                         $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_TEAMS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_TEAMS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_TEAMS . ".TeamID = " . TBL_SCORES . ".Team)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$j}')";
                         $resultB = $sql->db_Query($q);
                         $NbrPlayersTeamA = mysql_numrows($resultA);
                         $teamA_Rank = mysql_result($resultA, 0, TBL_SCORES . ".Player_Rank");
                         $teamA_Forfeit = mysql_result($resultA, 0, TBL_SCORES . ".Player_Forfeit");
                         $teamA_ELO = 0;
                         $teamA_TS_mu = 0;
                         $teamA_TS_sigma2 = 0;
                         $teamA_G2_r = 0;
                         $teamA_G2_RD2 = 0;
                         $teamA_G2_sigma2 = 0;
                         for ($k = 0; $k < $NbrPlayersTeamA; $k++) {
                             $teamA_ELO += mysql_result($resultA, $k, TBL_TEAMS . ".ELORanking");
                             $teamA_TS_mu += mysql_result($resultA, $k, TBL_TEAMS . ".TS_mu");
                             $teamA_TS_sigma2 += pow(mysql_result($resultA, $k, TBL_TEAMS . ".TS_sigma"), 2);
                             $teamA_G2_r += mysql_result($resultA, $k, TBL_TEAMS . ".G2_r");
                             $teamA_G2_RD2 += pow(mysql_result($resultA, $k, TBL_TEAMS . ".G2_RD"), 2);
                             $teamA_G2_sigma2 += pow(mysql_result($resultA, $k, TBL_TEAMS . ".G2_sigma"), 2);
                         }
                         $teamA_TS_sigma = sqrt($teamA_TS_sigma2);
                         $teamA_G2_RD = sqrt($teamA_G2_RD2);
                         $teamA_G2_sigma = sqrt($teamA_G2_sigma2);
                         $teamA_G2_mu = g2_from_g1_rating($teamA_G2_r, $G2_r0, G2_qinv);
                         $teamA_G2_phi = g2_from_g1_deviation($teamA_G2_RD, G2_qinv);
                         $output .= "Team {$i} ELO: {$teamA_ELO}, rank: {$teamA_Rank}<br />";
                         $output .= "Team {$i} TS: mu = {$teamA_TS_mu}, sigma= {$teamA_TS_sigma}<br />";
                         $output .= "Team {$i} G2: mu = {$teamA_G2_mu}, phi= {$teamA_G2_phi}, sigma= {$teamA_G2_sigma}<br />";
                         $NbrPlayersTeamB = mysql_numrows($resultB);
                         $teamB_Rank = mysql_result($resultB, 0, TBL_SCORES . ".Player_Rank");
                         $teamB_Forfeit = mysql_result($resultB, 0, TBL_SCORES . ".Player_Forfeit");
                         $teamB_ELO = 0;
                         $teamB_TS_mu = 0;
                         $teamB_TS_sigma2 = 0;
                         $teamB_G2_r = 0;
                         $teamB_G2_RD2 = 0;
                         $teamB_G2_sigma2 = 0;
                         for ($k = 0; $k < $NbrPlayersTeamB; $k++) {
                             $teamB_ELO += mysql_result($resultB, $k, TBL_TEAMS . ".ELORanking");
                             $teamB_TS_mu += mysql_result($resultB, $k, TBL_TEAMS . ".TS_mu");
                             $teamB_TS_sigma2 += pow(mysql_result($resultB, $k, TBL_TEAMS . ".TS_sigma"), 2);
                             $teamB_G2_r += mysql_result($resultB, $k, TBL_TEAMS . ".G2_r");
                             $teamB_G2_RD2 += pow(mysql_result($resultB, $k, TBL_TEAMS . ".G2_RD"), 2);
                             $teamB_G2_sigma2 += pow(mysql_result($resultB, $k, TBL_TEAMS . ".G2_sigma"), 2);
                         }
                         $teamB_TS_sigma = sqrt($teamB_TS_sigma2);
                         $teamB_G2_RD = sqrt($teamB_G2_RD2);
                         $teamB_G2_sigma = sqrt($teamB_G2_sigma2);
                         $teamB_G2_mu = g2_from_g1_rating($teamB_G2_r, $G2_r0, G2_qinv);
                         $teamB_G2_phi = g2_from_g1_deviation($teamB_G2_RD, G2_qinv);
                         $output .= "Team {$j} ELO: {$teamB_ELO}, rank: {$teamB_Rank}<br />";
                         $output .= "Team {$j} TS: mu = {$teamB_TS_mu}, sigma= {$teamB_TS_sigma}<br />";
                         $output .= "Team {$j} G2: mu = {$teamB_G2_mu}, phi= {$teamB_G2_phi}, sigma= {$teamB_G2_sigma}<br />";
                         break;
                     default:
                 }
                 $teamA_win = 0;
                 $teamA_loss = 0;
                 $teamA_draw = 0;
                 $teamB_win = 0;
                 $teamB_loss = 0;
                 $teamB_draw = 0;
                 // Wins/Losses/Draws
                 if ($teamA_Rank < $teamB_Rank) {
                     $teamA_win = 1;
                     $teamB_loss = 1;
                 } else {
                     if ($teamA_Rank > $teamB_Rank) {
                         $teamA_loss = 1;
                         $teamB_win = 1;
                     } else {
                         $teamA_draw = 1;
                         $teamB_draw = 1;
                     }
                 }
                 /* Forfeit */
                 $teamA_fwin = 0;
                 $teamA_floss = 0;
                 $teamB_fwin = 0;
                 $teamB_floss = 0;
                 if ($event->getField('AllowForfeit') == 1) {
                     if ($teamA_Forfeit == 1) {
                         $teamA_floss = 1;
                         $teamB_fwin = 1;
                         $teamA_loss = 0;
                         $teamB_win = 0;
                     } else {
                         if ($teamB_Forfeit == 1) {
                             $teamB_floss = 1;
                             $teamA_fwin = 1;
                             $teamB_loss = 0;
                             $teamA_win = 0;
                         }
                     }
                 }
                 $teamA_Points = $teamA_win * $event->getField('PointsPerWin') + $teamA_draw * $event->getField('PointsPerDraw') + $teamA_loss * $event->getField('PointsPerLoss') + $teamA_fwin * $event->getField('ForfeitWinPoints') + $teamA_floss * $event->getField('ForfeitLossPoints');
                 $teamB_Points = $teamB_win * $event->getField('PointsPerWin') + $teamB_draw * $event->getField('PointsPerDraw') + $teamB_loss * $event->getField('PointsPerLoss') + $teamB_fwin * $event->getField('ForfeitWinPoints') + $teamB_floss * $event->getField('ForfeitLossPoints');
                 $output .= "Team A: {$teamA_Points}, {$teamA_win}, {$teamA_draw}, {$teamA_loss}, <br />";
                 $output .= "Team B: {$teamB_Points}, {$teamB_win}, {$teamB_draw}, {$teamB_loss}, <br />";
                 if ($event->getField('ForfeitWinLossUpdate') == 1) {
                     $teamA_win += $teamA_fwin;
                     $teamB_win += $teamB_fwin;
                     $teamA_loss += $teamA_floss;
                     $teamB_loss += $teamB_floss;
                 }
                 // New ELO ------------------------------------------
                 $M = min($NbrPlayersTeamA, $NbrPlayersTeamB) * $event->getField('ELO_M');
                 // Span
                 $K = $event->getField('ELO_K');
                 // Max adjustment per game
                 if ($teamA_Forfeit == 1 || $teamB_Forfeit == 1) {
                     $deltaELO = 0;
                 } else {
                     $deltaELO = ELO($M, $K, $teamA_ELO, $teamB_ELO, $teamA_Rank, $teamB_Rank);
                 }
                 $output .= "deltaELO: {$deltaELO}<br />";
                 // New TrueSkill ------------------------------------------
                 $beta = $event->getField('TS_beta');
                 // beta
                 $epsilon = $event->getField('TS_epsilon');
                 // draw probability
                 $tau = $event->getField('TS_tau');
                 // dynamics factor
                 if ($teamA_Forfeit == 1 || $teamB_Forfeit == 1) {
                     $update = array(0, 1, 0, 1);
                 } else {
                     $update = Trueskill_update($epsilon, $beta, $tau, $teamA_TS_mu, $teamA_TS_sigma, $teamA_Rank, $teamB_TS_mu, $teamB_TS_sigma, $teamB_Rank);
                 }
                 $teamA_deltaTS_mu = $update[0];
                 $teamA_deltaTS_sigma = $update[1];
                 $teamB_deltaTS_mu = $update[2];
                 $teamB_deltaTS_sigma = $update[3];
                 $output .= "Team {$i} TS: delta mu = {$teamA_deltaTS_mu}, delta sigma= {$teamA_deltaTS_sigma}<br />";
                 $output .= "Team {$j} TS: delta mu = {$teamB_deltaTS_mu}, delta sigma= {$teamB_deltaTS_sigma}<br />";
                 // New Glicko 2 ------------------------------------------
                 $epsilon = $event->getField('G2_epsilon');
                 //
                 $tau = $event->getField('G2_tau');
                 // volatility variance
                 if ($teamA_Forfeit == 1 || $teamB_Forfeit == 1) {
                     $update_A = array(0, 1, 1, 0, 1, 1);
                     $update_B = array(0, 1, 1, 0, 1, 1);
                 } else {
                     $update_A = glicko2_update($teamA_G2_mu, $teamA_G2_phi, $teamA_G2_sigma, $teamA_Rank, $teamB_G2_mu, $teamB_G2_phi, $teamB_G2_sigma, $teamB_Rank, $tau, $epsilon);
                     $update_B = glicko2_update($teamB_G2_mu, $teamB_G2_phi, $teamB_G2_sigma, $teamB_Rank, $teamA_G2_mu, $teamA_G2_phi, $teamA_G2_sigma, $teamA_Rank, $tau, $epsilon);
                 }
                 $teamA_deltaG2_mu = $update_A[0];
                 $teamA_deltaG2_phi = $update_A[1];
                 $teamA_deltaG2_sigma = $update_A[2];
                 $teamB_deltaG2_mu = $update_B[0];
                 $teamB_deltaG2_phi = $update_B[1];
                 $teamB_deltaG2_sigma = $update_B[2];
                 $output .= "Team {$i} G2: delta mu = {$teamA_deltaG2_mu}, delta phi= {$teamA_deltaG2_phi}, delta sigma= {$teamA_deltaG2_sigma}<br />";
                 $output .= "Team {$j} G2: delta mu = {$teamB_deltaG2_mu}, delta phi= {$teamB_deltaG2_phi}, delta sigma= {$teamB_deltaG2_sigma}<br />";
                 // Update Scores ------------------------------------------
                 for ($k = 0; $k < $NbrPlayersTeamA; $k++) {
                     $scoreELO = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaELO");
                     $scoreTS_mu = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaTS_mu");
                     $scoreTS_sigma = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaTS_sigma");
                     $scoreG2_mu = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaG2_mu");
                     $scoreG2_phi = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaG2_phi");
                     $scoreG2_sigma = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaG2_sigma");
                     $scoreWin = mysql_result($resultA, $k, TBL_SCORES . ".Player_Win");
                     $scoreDraw = mysql_result($resultA, $k, TBL_SCORES . ".Player_Draw");
                     $scoreLoss = mysql_result($resultA, $k, TBL_SCORES . ".Player_Loss");
                     $scorePoints = mysql_result($resultA, $k, TBL_SCORES . ".Player_Points");
                     $scoreELO += $deltaELO / $NbrPlayersTeamA;
                     $scoreTS_mu += $teamA_deltaTS_mu / $NbrPlayersTeamA;
                     $scoreTS_sigma *= $teamA_deltaTS_sigma;
                     $scoreG2_mu += $teamA_deltaG2_mu / $NbrPlayersTeamA;
                     $scoreG2_phi *= $teamA_deltaG2_phi;
                     $scoreG2_sigma *= $teamA_deltaG2_sigma;
                     $scoreWin += $teamA_win;
                     $scoreDraw += $teamA_draw;
                     $scoreLoss += $teamA_loss;
                     $scorePoints += $teamA_Points;
                     switch ($event->getMatchPlayersType()) {
                         case 'Players':
                             $pid = mysql_result($resultA, $k, TBL_PLAYERS . ".PlayerID");
                             $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . "     Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . "     Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . "     Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . "     Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . "     Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . "     Player_Win = {$scoreWin}," . "     Player_Draw = {$scoreDraw}," . "     Player_Loss = {$scoreLoss}," . "     Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . "   AND (Player = '{$pid}')";
                             break;
                         case 'Teams':
                             $pid = mysql_result($resultA, $k, TBL_TEAMS . ".TeamID");
                             $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . "     Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . "     Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . "     Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . "     Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . "     Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . "     Player_Win = {$scoreWin}," . "     Player_Draw = {$scoreDraw}," . "     Player_Loss = {$scoreLoss}," . "     Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . "   AND (Team = '{$pid}')";
                             break;
                         default:
                     }
                     $result = $sql->db_Query($q);
                     $output .= "team A, Player {$pid} query: {$q}<br />";
                 }
                 for ($k = 0; $k < $NbrPlayersTeamB; $k++) {
                     $scoreELO = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaELO");
                     $scoreTS_mu = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaTS_mu");
                     $scoreTS_sigma = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaTS_sigma");
                     $scoreG2_mu = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaG2_mu");
                     $scoreG2_phi = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaG2_phi");
                     $scoreG2_sigma = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaG2_sigma");
                     $scoreWin = mysql_result($resultB, $k, TBL_SCORES . ".Player_Win");
                     $scoreDraw = mysql_result($resultB, $k, TBL_SCORES . ".Player_Draw");
                     $scoreLoss = mysql_result($resultB, $k, TBL_SCORES . ".Player_Loss");
                     $scorePoints = mysql_result($resultB, $k, TBL_SCORES . ".Player_Points");
                     $scoreELO -= $deltaELO / $NbrPlayersTeamB;
                     $scoreTS_mu += $teamB_deltaTS_mu / $NbrPlayersTeamB;
                     $scoreTS_sigma *= $teamB_deltaTS_sigma;
                     $scoreG2_mu += $teamB_deltaG2_mu / $NbrPlayersTeamB;
                     $scoreG2_phi *= $teamB_deltaG2_phi;
                     $scoreG2_sigma *= $teamB_deltaG2_sigma;
                     $scoreWin += $teamB_win;
                     $scoreDraw += $teamB_draw;
                     $scoreLoss += $teamB_loss;
                     $scorePoints += $teamB_Points;
                     switch ($event->getMatchPlayersType()) {
                         case 'Players':
                             $pid = mysql_result($resultB, $k, TBL_PLAYERS . ".PlayerID");
                             $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . "     Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . "     Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . "     Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . "     Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . "     Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . "     Player_Win = {$scoreWin}," . "     Player_Draw = {$scoreDraw}," . "     Player_Loss = {$scoreLoss}," . "     Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . "   AND (Player = '{$pid}')";
                             break;
                         case 'Teams':
                             $tid = mysql_result($resultB, $k, TBL_TEAMS . ".TeamID");
                             $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . "     Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . "     Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . "     Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . "     Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . "     Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . "     Player_Win = {$scoreWin}," . "     Player_Draw = {$scoreDraw}," . "     Player_Loss = {$scoreLoss}," . "     Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Team = '{$tid}')";
                             break;
                         default:
                     }
                     $result = $sql->db_Query($q);
                 }
             }
         }
         $output .= '<br />';
         // Update scores score against
         switch ($event->getMatchPlayersType()) {
             case 'Players':
                 $q = "SELECT " . TBL_SCORES . ".*, " . TBL_PLAYERS . ".*" . " FROM " . TBL_SCORES . ", " . TBL_PLAYERS . " WHERE (" . TBL_SCORES . ".MatchID = '" . $this->fields['MatchID'] . "')" . "   AND (" . TBL_SCORES . ".Player = " . TBL_PLAYERS . ".PlayerID)";
                 break;
             case 'Teams':
                 $q = "SELECT " . TBL_SCORES . ".*, " . TBL_TEAMS . ".*" . " FROM " . TBL_SCORES . ", " . TBL_TEAMS . " WHERE (" . TBL_SCORES . ".MatchID = '" . $this->fields['MatchID'] . "')" . "   AND (" . TBL_SCORES . ".Team = " . TBL_TEAMS . ".TeamID)";
                 break;
             default:
         }
         $result = $sql->db_Query($q);
         $nbr_players = mysql_numrows($result);
         for ($i = 0; $i < $nbr_players; $i++) {
             switch ($event->getMatchPlayersType()) {
                 case 'Players':
                     $pid = mysql_result($result, $i, TBL_PLAYERS . ".PlayerID");
                     break;
                 case 'Teams':
                     $pid = mysql_result($result, $i, TBL_TEAMS . ".TeamID");
                     break;
                 default:
             }
             $scoreid = mysql_result($result, $i, TBL_SCORES . ".ScoreID");
             $prank = mysql_result($result, $i, TBL_SCORES . ".Player_Rank");
             $pteam = mysql_result($result, $i, TBL_SCORES . ".Player_MatchTeam");
             $pOppScore = 0;
             $pnbrOpps = 0;
             for ($j = 0; $j < $nbr_players; $j++) {
                 $opprank = mysql_result($result, $j, TBL_SCORES . ".Player_Rank");
                 $oppteam = mysql_result($result, $j, TBL_SCORES . ".Player_MatchTeam");
                 $oppscore = mysql_result($result, $j, TBL_SCORES . ".Player_Score");
                 if ($pteam != $oppteam) {
                     $pOppScore += $oppscore;
                     $pnbrOpps++;
                 }
             }
             $pOppScore /= $pnbrOpps;
             switch ($event->getMatchPlayersType()) {
                 case 'Players':
                     $q_1 = "UPDATE " . TBL_SCORES . " SET Player_ScoreAgainst = {$pOppScore}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Player = '{$pid}')";
                     break;
                 case 'Teams':
                     $q_1 = "UPDATE " . TBL_SCORES . " SET Player_ScoreAgainst = {$pOppScore}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Team = '{$pid}')";
                     break;
                 default:
             }
             $result_1 = $sql->db_Query($q_1);
         }
         $output .= '<br />';
         //echo $output;
         //exit;
     }
 }