mirror of
https://github.com/furyfire/trueskill.git
synced 2025-04-16 11:04:27 +00:00
Move to DNW namespace
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
use Moserware\Skills\Rating;
|
||||
use DNW\Skills\Rating;
|
||||
|
||||
/**
|
||||
* An Elo rating represented by a single number (mean).
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
use Moserware\Skills\GameInfo;
|
||||
use DNW\Skills\GameInfo;
|
||||
|
||||
/**
|
||||
* Including Elo's scheme as a simple comparison.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
// see http://ratings.fide.com/calculator_rtd.phtml for details
|
||||
class FideKFactor extends KFactor
|
||||
|
@ -1,18 +1,18 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
use Moserware\Skills\GameInfo;
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\GameInfo;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
class GaussianEloCalculator extends TwoPlayerEloCalculator
|
||||
{
|
||||
// From the paper
|
||||
const STABLE_KFACTOR = 24;
|
||||
|
||||
public function __construct()
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(new KFactor(self::STABLE_KFACTOR));
|
||||
}
|
||||
|
||||
|
||||
public function getPlayerWinProbability(GameInfo $gameInfo, $playerRating, $opponentRating)
|
||||
{
|
||||
$ratingDifference = $playerRating - $opponentRating;
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
class KFactor
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
/**
|
||||
* Indicates someone who has played less than 30 games.
|
||||
|
@ -1,19 +1,19 @@
|
||||
<?php namespace Moserware\Skills\Elo;
|
||||
<?php namespace DNW\Skills\Elo;
|
||||
|
||||
use Exception;
|
||||
use Moserware\Skills\GameInfo;
|
||||
use Moserware\Skills\PairwiseComparison;
|
||||
use Moserware\Skills\RankSorter;
|
||||
use Moserware\Skills\SkillCalculator;
|
||||
use Moserware\Skills\SkillCalculatorSupportedOptions;
|
||||
use Moserware\Skills\PlayersRange;
|
||||
use Moserware\Skills\TeamsRange;
|
||||
use DNW\Skills\GameInfo;
|
||||
use DNW\Skills\PairwiseComparison;
|
||||
use DNW\Skills\RankSorter;
|
||||
use DNW\Skills\SkillCalculator;
|
||||
use DNW\Skills\SkillCalculatorSupportedOptions;
|
||||
use DNW\Skills\PlayersRange;
|
||||
use DNW\Skills\TeamsRange;
|
||||
|
||||
abstract class TwoPlayerEloCalculator extends SkillCalculator
|
||||
{
|
||||
protected $_kFactor;
|
||||
|
||||
protected function __construct(KFactor $kFactor)
|
||||
protected function __construct(KFactor $kFactor)
|
||||
{
|
||||
parent::__construct(SkillCalculatorSupportedOptions::NONE, TeamsRange::exactly(2), PlayersRange::exactly(1));
|
||||
$this->_kFactor = $kFactor;
|
||||
@ -23,16 +23,16 @@ abstract class TwoPlayerEloCalculator extends SkillCalculator
|
||||
{
|
||||
$this->validateTeamCountAndPlayersCountPerTeam($teamsOfPlayerToRatings);
|
||||
RankSorter::sort($teamsOfPlayerToRatings, $teamRanks);
|
||||
|
||||
|
||||
$result = array();
|
||||
$isDraw = ($teamRanks[0] === $teamRanks[1]);
|
||||
|
||||
$team1 = $teamsOfPlayerToRatings[0];
|
||||
$team2 = $teamsOfPlayerToRatings[1];
|
||||
|
||||
|
||||
$player1 = each($team1);
|
||||
$player2 = each($team2);
|
||||
|
||||
|
||||
$player1Rating = $player1["value"]->getMean();
|
||||
$player2Rating = $player2["value"]->getMean();
|
||||
|
||||
@ -75,13 +75,13 @@ abstract class TwoPlayerEloCalculator extends SkillCalculator
|
||||
$this->validateTeamCountAndPlayersCountPerTeam($teamsOfPlayerToRatings);
|
||||
$team1 = $teamsOfPlayerToRatings[0];
|
||||
$team2 = $teamsOfPlayerToRatings[1];
|
||||
|
||||
|
||||
$player1 = $team1[0];
|
||||
$player2 = $team2[0];
|
||||
|
||||
|
||||
$player1Rating = $player1[1]->getMean();
|
||||
$player2Rating = $player2[1]->getMean();
|
||||
|
||||
|
||||
$ratingDifference = $player1Rating - $player2Rating;
|
||||
|
||||
// The TrueSkill paper mentions that they used s1 - s2 (rating difference) to
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
use Exception;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
use Exception;
|
||||
use Moserware\Skills\Guard;
|
||||
use Moserware\Skills\HashMap;
|
||||
use DNW\Skills\Guard;
|
||||
use DNW\Skills\HashMap;
|
||||
|
||||
abstract class Factor
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class FactorGraph
|
||||
{
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
// edit this
|
||||
abstract class FactorGraphLayer
|
||||
{
|
||||
private $_localFactors = array();
|
||||
private $_outputVariablesGroups = array();
|
||||
private $_outputVariablesGroups = array();
|
||||
private $_inputVariablesGroups = array();
|
||||
private $_parentFactorGraph;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
/**
|
||||
* Helper class for computing the factor graph's normalization constant.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class KeyedVariable extends Variable
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class Message
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
abstract class Schedule
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class ScheduleLoop extends Schedule
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class ScheduleSequence extends Schedule
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class ScheduleStep extends Schedule
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Moserware\Skills\FactorGraphs;
|
||||
namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class Variable
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\FactorGraphs;
|
||||
<?php namespace DNW\Skills\FactorGraphs;
|
||||
|
||||
class VariableFactory
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
/**
|
||||
* Parameters about the game for calculating the TrueSkill.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
use Exception;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
/**
|
||||
* Basic hashmap that supports object keys.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
/**
|
||||
* Indicates support for allowing partial play (where a player only plays a part of the time).
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
interface ISupportPartialUpdate
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
/**
|
||||
* Basic math functions.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
class DiagonalMatrix extends Matrix
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
/**
|
||||
* Computes Gaussian (bell curve) values.
|
||||
@ -177,7 +177,7 @@ class GaussianDistribution
|
||||
|
||||
private static function errorFunctionCumulativeTo($x)
|
||||
{
|
||||
// Derived from page 265 of Numerical Recipes 3rd Edition
|
||||
// Derived from page 265 of Numerical Recipes 3rd Edition
|
||||
$z = abs($x);
|
||||
|
||||
$t = 2.0 / (2.0 + $z);
|
||||
@ -229,7 +229,7 @@ class GaussianDistribution
|
||||
|
||||
private static function inverseErrorFunctionCumulativeTo($p)
|
||||
{
|
||||
// From page 265 of numerical recipes
|
||||
// From page 265 of numerical recipes
|
||||
|
||||
if ($p >= 2.0) {
|
||||
return -100;
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
class IdentityMatrix extends DiagonalMatrix
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
use Exception;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
// The whole purpose of this class is to make the code for the SkillCalculator(s)
|
||||
// look a little cleaner
|
||||
@ -9,7 +9,7 @@ class Range
|
||||
{
|
||||
private $_min;
|
||||
private $_max;
|
||||
|
||||
|
||||
public function __construct($min, $max)
|
||||
{
|
||||
if ($min > $max)
|
||||
@ -24,13 +24,13 @@ class Range
|
||||
public function getMin()
|
||||
{
|
||||
return $this->_min;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getMax()
|
||||
{
|
||||
return $this->_max;
|
||||
}
|
||||
|
||||
|
||||
protected static function create($min, $max)
|
||||
{
|
||||
return new Range($min, $max);
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
class SquareMatrix extends Matrix
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills\Numerics;
|
||||
<?php namespace DNW\Skills\Numerics;
|
||||
|
||||
class Vector extends Matrix
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
/**
|
||||
* Represents a comparison between two players.
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
class PartialPlay
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
/**
|
||||
* Represents a player who has a Rating.
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
use Moserware\Skills\Numerics\Range;
|
||||
use DNW\Skills\Numerics\Range;
|
||||
|
||||
class PlayersRange extends Range
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
/**
|
||||
* Helper class to sort ranks in non-decreasing order.
|
||||
@ -13,7 +13,7 @@ class RankSorter
|
||||
* @return array
|
||||
*/
|
||||
public static function sort(array &$teams, array &$teamRanks)
|
||||
{
|
||||
{
|
||||
array_multisort($teamRanks, $teams);
|
||||
return $teams;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
// Container for a player's rating.
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
class Rating
|
||||
{
|
||||
@ -54,7 +54,7 @@ class Rating
|
||||
$posteriorGaussian = new GaussianDistribution($fullPosterior->getMean(), $fullPosterior . getStandardDeviation());
|
||||
|
||||
// From a clarification email from Ralf Herbrich:
|
||||
// "the idea is to compute a linear interpolation between the prior and posterior skills of each player
|
||||
// "the idea is to compute a linear interpolation between the prior and posterior skills of each player
|
||||
// ... in the canonical space of parameters"
|
||||
|
||||
$precisionDifference = $posteriorGaussian->getPrecision() - $priorGaussian->getPrecision();
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
class RatingContainer
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
use Exception;
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
class Team extends RatingContainer
|
||||
{
|
||||
public function __construct(Player $player = null, Rating $rating = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
|
||||
if(!is_null($player))
|
||||
{
|
||||
$this->addPlayer($player, $rating);
|
||||
@ -16,5 +16,5 @@ class Team extends RatingContainer
|
||||
{
|
||||
$this->setRating($player, $rating);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
class Teams
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php namespace Moserware\Skills;
|
||||
<?php namespace DNW\Skills;
|
||||
|
||||
use Moserware\Skills\Numerics\Range;
|
||||
use DNW\Skills\Numerics\Range;
|
||||
|
||||
class TeamsRange extends Range
|
||||
{
|
||||
@ -8,7 +8,7 @@ class TeamsRange extends Range
|
||||
{
|
||||
parent::__construct($min, $max);
|
||||
}
|
||||
|
||||
|
||||
protected static function create($min, $max)
|
||||
{
|
||||
return new TeamsRange($min, $max);
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill;
|
||||
<?php namespace DNW\Skills\TrueSkill;
|
||||
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
final class DrawMargin
|
||||
{
|
||||
|
@ -1,19 +1,19 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill;
|
||||
<?php namespace DNW\Skills\TrueSkill;
|
||||
|
||||
use Moserware\Skills\GameInfo;
|
||||
use Moserware\Skills\Guard;
|
||||
use Moserware\Skills\ISupportPartialPlay;
|
||||
use Moserware\Skills\ISupportPartialUpdate;
|
||||
use Moserware\Skills\Numerics\BasicMath;
|
||||
use Moserware\Skills\Numerics\DiagonalMatrix;
|
||||
use Moserware\Skills\Numerics\Matrix;
|
||||
use Moserware\Skills\Numerics\Vector;
|
||||
use Moserware\Skills\PartialPlay;
|
||||
use Moserware\Skills\PlayersRange;
|
||||
use Moserware\Skills\RankSorter;
|
||||
use Moserware\Skills\SkillCalculator;
|
||||
use Moserware\Skills\SkillCalculatorSupportedOptions;
|
||||
use Moserware\Skills\TeamsRange;
|
||||
use DNW\Skills\GameInfo;
|
||||
use DNW\Skills\Guard;
|
||||
use DNW\Skills\ISupportPartialPlay;
|
||||
use DNW\Skills\ISupportPartialUpdate;
|
||||
use DNW\Skills\Numerics\BasicMath;
|
||||
use DNW\Skills\Numerics\DiagonalMatrix;
|
||||
use DNW\Skills\Numerics\Matrix;
|
||||
use DNW\Skills\Numerics\Vector;
|
||||
use DNW\Skills\PartialPlay;
|
||||
use DNW\Skills\PlayersRange;
|
||||
use DNW\Skills\RankSorter;
|
||||
use DNW\Skills\SkillCalculator;
|
||||
use DNW\Skills\SkillCalculatorSupportedOptions;
|
||||
use DNW\Skills\TeamsRange;
|
||||
|
||||
/**
|
||||
* Calculates TrueSkill using a full factor graph.
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Factors;
|
||||
<?php namespace DNW\Skills\TrueSkill\Factors;
|
||||
|
||||
use Moserware\Skills\FactorGraphs\Factor;
|
||||
use Moserware\Skills\FactorGraphs\Message;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\FactorGraphs\Factor;
|
||||
use DNW\Skills\FactorGraphs\Message;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
abstract class GaussianFactor extends Factor
|
||||
{
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Factors;
|
||||
<?php namespace DNW\Skills\TrueSkill\Factors;
|
||||
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use Moserware\Skills\TrueSkill\TruncatedGaussianCorrectionFunctions;
|
||||
use Moserware\Skills\FactorGraphs\Message;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\TrueSkill\TruncatedGaussianCorrectionFunctions;
|
||||
use DNW\Skills\FactorGraphs\Message;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
|
||||
/**
|
||||
* Factor representing a team difference that has exceeded the draw margin.
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Factors;
|
||||
<?php namespace DNW\Skills\TrueSkill\Factors;
|
||||
|
||||
use Exception;
|
||||
use Moserware\Skills\FactorGraphs\KeyedVariable;
|
||||
use Moserware\Skills\FactorGraphs\Message;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\FactorGraphs\KeyedVariable;
|
||||
use DNW\Skills\FactorGraphs\Message;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
/**
|
||||
* Connects two variables and adds uncertainty.
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Factors;
|
||||
<?php namespace DNW\Skills\TrueSkill\Factors;
|
||||
|
||||
use Moserware\Skills\FactorGraphs\Message;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\FactorGraphs\Message;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
/**
|
||||
* Supplies the factor graph with prior information.
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Factors;
|
||||
<?php namespace DNW\Skills\TrueSkill\Factors;
|
||||
|
||||
use Moserware\Skills\Guard;
|
||||
use Moserware\Skills\FactorGraphs\Message;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use Moserware\Skills\Numerics\BasicMath;
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\Guard;
|
||||
use DNW\Skills\FactorGraphs\Message;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\Numerics\BasicMath;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
/**
|
||||
* Factor that sums together multiple Gaussians.
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Factors;
|
||||
<?php namespace DNW\Skills\TrueSkill\Factors;
|
||||
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use Moserware\Skills\TrueSkill\TruncatedGaussianCorrectionFunctions;
|
||||
use Moserware\Skills\FactorGraphs\Message;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\TrueSkill\TruncatedGaussianCorrectionFunctions;
|
||||
use DNW\Skills\FactorGraphs\Message;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
|
||||
/**
|
||||
* Factor representing a team difference that has not exceeded the draw margin.
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Exception;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleLoop;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleSequence;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleStep;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\FactorGraphs\ScheduleLoop;
|
||||
use DNW\Skills\FactorGraphs\ScheduleSequence;
|
||||
use DNW\Skills\FactorGraphs\ScheduleStep;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
|
||||
// The whole purpose of this is to do a loop on the bottom
|
||||
class IteratedTeamDifferencesInnerLayer extends TrueSkillFactorGraphLayer
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Moserware\Skills\PartialPlay;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleLoop;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleSequence;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleStep;
|
||||
use Moserware\Skills\TrueSkill\Factors\GaussianWeightedSumFactor;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\PartialPlay;
|
||||
use DNW\Skills\FactorGraphs\ScheduleLoop;
|
||||
use DNW\Skills\FactorGraphs\ScheduleSequence;
|
||||
use DNW\Skills\FactorGraphs\ScheduleStep;
|
||||
use DNW\Skills\TrueSkill\Factors\GaussianWeightedSumFactor;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
|
||||
class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLayer
|
||||
{
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Moserware\Skills\Numerics\BasicMath;
|
||||
use Moserware\Skills\Rating;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleStep;
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use Moserware\Skills\TrueSkill\Factors\GaussianPriorFactor;
|
||||
use DNW\Skills\Numerics\BasicMath;
|
||||
use DNW\Skills\Rating;
|
||||
use DNW\Skills\FactorGraphs\ScheduleStep;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\TrueSkill\Factors\GaussianPriorFactor;
|
||||
|
||||
// We intentionally have no Posterior schedule since the only purpose here is to
|
||||
// start the process.
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Moserware\Skills\FactorGraphs\ScheduleStep;
|
||||
use Moserware\Skills\FactorGraphs\KeyedVariable;
|
||||
use Moserware\Skills\Numerics\BasicMath;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use Moserware\Skills\TrueSkill\Factors\GaussianLikelihoodFactor;
|
||||
use DNW\Skills\FactorGraphs\ScheduleStep;
|
||||
use DNW\Skills\FactorGraphs\KeyedVariable;
|
||||
use DNW\Skills\Numerics\BasicMath;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\TrueSkill\Factors\GaussianLikelihoodFactor;
|
||||
|
||||
class PlayerSkillsToPerformancesLayer extends TrueSkillFactorGraphLayer
|
||||
{
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Moserware\Skills\TrueSkill\DrawMargin;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use Moserware\Skills\TrueSkill\Factors\GaussianGreaterThanFactor;
|
||||
use Moserware\Skills\TrueSkill\Factors\GaussianWithinFactor;
|
||||
use DNW\Skills\TrueSkill\DrawMargin;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\TrueSkill\Factors\GaussianGreaterThanFactor;
|
||||
use DNW\Skills\TrueSkill\Factors\GaussianWithinFactor;
|
||||
|
||||
class TeamDifferencesComparisonLayer extends TrueSkillFactorGraphLayer
|
||||
{
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Moserware\Skills\FactorGraphs\Variable;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use Moserware\Skills\TrueSkill\Factors\GaussianWeightedSumFactor;
|
||||
use DNW\Skills\FactorGraphs\Variable;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\TrueSkill\Factors\GaussianWeightedSumFactor;
|
||||
|
||||
class TeamPerformancesToTeamPerformanceDifferencesLayer extends TrueSkillFactorGraphLayer
|
||||
{
|
||||
@ -26,7 +26,7 @@ class TeamPerformancesToTeamPerformanceDifferencesLayer extends TrueSkillFactorG
|
||||
$newDifferencesFactor = $this->createTeamPerformanceToDifferenceFactor($strongerTeam, $weakerTeam, $currentDifference);
|
||||
$this->addLayerFactor($newDifferencesFactor);
|
||||
|
||||
// REVIEW: Does it make sense to have groups of one?
|
||||
// REVIEW: Does it make sense to have groups of one?
|
||||
$outputVariablesGroup[] = array($currentDifference);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill\Layers;
|
||||
<?php namespace DNW\Skills\TrueSkill\Layers;
|
||||
|
||||
use Moserware\Skills\FactorGraphs\FactorGraphLayer;
|
||||
use Moserware\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
use DNW\Skills\FactorGraphs\FactorGraphLayer;
|
||||
use DNW\Skills\TrueSkill\TrueSkillFactorGraph;
|
||||
|
||||
abstract class TrueSkillFactorGraphLayer extends FactorGraphLayer
|
||||
{
|
||||
|
@ -1,19 +1,19 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill;
|
||||
<?php namespace DNW\Skills\TrueSkill;
|
||||
|
||||
use Moserware\Skills\GameInfo;
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use Moserware\Skills\Rating;
|
||||
use Moserware\Skills\RatingContainer;
|
||||
use Moserware\Skills\FactorGraphs\FactorGraph;
|
||||
use Moserware\Skills\FactorGraphs\FactorList;
|
||||
use Moserware\Skills\FactorGraphs\ScheduleSequence;
|
||||
use Moserware\Skills\FactorGraphs\VariableFactory;
|
||||
use Moserware\Skills\TrueSkill\Layers\IteratedTeamDifferencesInnerLayer;
|
||||
use Moserware\Skills\TrueSkill\Layers\PlayerPerformancesToTeamPerformancesLayer;
|
||||
use Moserware\Skills\TrueSkill\Layers\PlayerPriorValuesToSkillsLayer;
|
||||
use Moserware\Skills\TrueSkill\Layers\PlayerSkillsToPerformancesLayer;
|
||||
use Moserware\Skills\TrueSkill\Layers\TeamDifferencesComparisonLayer;
|
||||
use Moserware\Skills\TrueSkill\Layers\TeamPerformancesToTeamPerformanceDifferencesLayer;
|
||||
use DNW\Skills\GameInfo;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\Rating;
|
||||
use DNW\Skills\RatingContainer;
|
||||
use DNW\Skills\FactorGraphs\FactorGraph;
|
||||
use DNW\Skills\FactorGraphs\FactorList;
|
||||
use DNW\Skills\FactorGraphs\ScheduleSequence;
|
||||
use DNW\Skills\FactorGraphs\VariableFactory;
|
||||
use DNW\Skills\TrueSkill\Layers\IteratedTeamDifferencesInnerLayer;
|
||||
use DNW\Skills\TrueSkill\Layers\PlayerPerformancesToTeamPerformancesLayer;
|
||||
use DNW\Skills\TrueSkill\Layers\PlayerPriorValuesToSkillsLayer;
|
||||
use DNW\Skills\TrueSkill\Layers\PlayerSkillsToPerformancesLayer;
|
||||
use DNW\Skills\TrueSkill\Layers\TeamDifferencesComparisonLayer;
|
||||
use DNW\Skills\TrueSkill\Layers\TeamPerformancesToTeamPerformanceDifferencesLayer;
|
||||
|
||||
class TrueSkillFactorGraph extends FactorGraph
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill;
|
||||
<?php namespace DNW\Skills\TrueSkill;
|
||||
|
||||
use Moserware\Skills\Numerics\GaussianDistribution;
|
||||
use DNW\Skills\Numerics\GaussianDistribution;
|
||||
|
||||
class TruncatedGaussianCorrectionFunctions
|
||||
{
|
||||
|
@ -1,20 +1,20 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill;
|
||||
<?php namespace DNW\Skills\TrueSkill;
|
||||
|
||||
use Moserware\Skills\GameInfo;
|
||||
use Moserware\Skills\Guard;
|
||||
use Moserware\Skills\Numerics\BasicMath;
|
||||
use Moserware\Skills\PairwiseComparison;
|
||||
use Moserware\Skills\RankSorter;
|
||||
use Moserware\Skills\Rating;
|
||||
use Moserware\Skills\RatingContainer;
|
||||
use Moserware\Skills\SkillCalculator;
|
||||
use Moserware\Skills\SkillCalculatorSupportedOptions;
|
||||
use Moserware\Skills\PlayersRange;
|
||||
use Moserware\Skills\TeamsRange;
|
||||
use DNW\Skills\GameInfo;
|
||||
use DNW\Skills\Guard;
|
||||
use DNW\Skills\Numerics\BasicMath;
|
||||
use DNW\Skills\PairwiseComparison;
|
||||
use DNW\Skills\RankSorter;
|
||||
use DNW\Skills\Rating;
|
||||
use DNW\Skills\RatingContainer;
|
||||
use DNW\Skills\SkillCalculator;
|
||||
use DNW\Skills\SkillCalculatorSupportedOptions;
|
||||
use DNW\Skills\PlayersRange;
|
||||
use DNW\Skills\TeamsRange;
|
||||
|
||||
/**
|
||||
* Calculates the new ratings for only two players.
|
||||
*
|
||||
*
|
||||
* When you only have two players, a lot of the math simplifies. The main purpose of this class
|
||||
* is to show the bare minimum of what a TrueSkill implementation should have.
|
||||
*/
|
||||
@ -35,12 +35,12 @@ class TwoPlayerTrueSkillCalculator extends SkillCalculator
|
||||
|
||||
// Make sure things are in order
|
||||
RankSorter::sort($teams, $teamRanks);
|
||||
|
||||
|
||||
// Since we verified that each team has one player, we know the player is the first one
|
||||
$winningTeamPlayers = $teams[0]->getAllPlayers();
|
||||
$winner = $winningTeamPlayers[0];
|
||||
$winnerPreviousRating = $teams[0]->getRating($winner);
|
||||
|
||||
|
||||
$losingTeamPlayers = $teams[1]->getAllPlayers();
|
||||
$loser = $losingTeamPlayers[0];
|
||||
$loserPreviousRating = $teams[1]->getRating($loser);
|
||||
|
@ -1,19 +1,19 @@
|
||||
<?php namespace Moserware\Skills\TrueSkill;
|
||||
<?php namespace DNW\Skills\TrueSkill;
|
||||
|
||||
use Moserware\Skills\GameInfo;
|
||||
use Moserware\Skills\Guard;
|
||||
use Moserware\Skills\Numerics\BasicMath;
|
||||
use Moserware\Skills\PairwiseComparison;
|
||||
use Moserware\Skills\RankSorter;
|
||||
use Moserware\Skills\Rating;
|
||||
use Moserware\Skills\RatingContainer;
|
||||
use Moserware\Skills\SkillCalculator;
|
||||
use Moserware\Skills\SkillCalculatorSupportedOptions;
|
||||
use DNW\Skills\GameInfo;
|
||||
use DNW\Skills\Guard;
|
||||
use DNW\Skills\Numerics\BasicMath;
|
||||
use DNW\Skills\PairwiseComparison;
|
||||
use DNW\Skills\RankSorter;
|
||||
use DNW\Skills\Rating;
|
||||
use DNW\Skills\RatingContainer;
|
||||
use DNW\Skills\SkillCalculator;
|
||||
use DNW\Skills\SkillCalculatorSupportedOptions;
|
||||
|
||||
use Moserware\Skills\PlayersRange;
|
||||
use Moserware\Skills\TeamsRange;
|
||||
use DNW\Skills\PlayersRange;
|
||||
use DNW\Skills\TeamsRange;
|
||||
|
||||
use Moserware\Skills\Team;
|
||||
use DNW\Skills\Team;
|
||||
|
||||
/**
|
||||
* Calculates new ratings for only two teams where each team has 1 or more players.
|
||||
|
Reference in New Issue
Block a user