mirror of
				https://github.com/furyfire/trueskill.git
				synced 2025-11-04 10:12:28 +01:00 
			
		
		
		
	It gets a result... unfortunately it's wrong. But hey, that's progress :) Lots of debugging code left in to make up for a less than ideal debugger
This commit is contained in:
		@@ -83,14 +83,16 @@ class IteratedTeamDifferencesInnerLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
        $teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors();
 | 
			
		||||
        $teamDifferencesComparisonLayerLocalFactors = &$this->_TeamDifferencesComparisonLayer->getLocalFactors();
 | 
			
		||||
 | 
			
		||||
        $firstPerfToTeamDiff = &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[0];
 | 
			
		||||
        $firstTeamDiffComparison = &$teamDifferencesComparisonLayerLocalFactors[0];
 | 
			
		||||
        $itemsToSequence = array(
 | 
			
		||||
                    new ScheduleStep(
 | 
			
		||||
                        "send team perf to perf differences",
 | 
			
		||||
                        &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[0],
 | 
			
		||||
                        $firstPerfToTeamDiff,
 | 
			
		||||
                        0),
 | 
			
		||||
                    new ScheduleStep(
 | 
			
		||||
                        "send to greater than or within factor",
 | 
			
		||||
                        &$teamDifferencesComparisonLayerLocalFactors[0],
 | 
			
		||||
                        $firstTeamDiffComparison,
 | 
			
		||||
                        0)
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
@@ -110,18 +112,21 @@ class IteratedTeamDifferencesInnerLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
            $teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors();
 | 
			
		||||
            $teamDifferencesComparisonLayerLocalFactors = &$this->_TeamDifferencesComparisonLayer->getLocalFactors();
 | 
			
		||||
 | 
			
		||||
            $currentTeamPerfToTeamPerfDiff = &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$i];
 | 
			
		||||
            $currentTeamDiffComparison = &$teamDifferencesComparisonLayerLocalFactors[$i];
 | 
			
		||||
 | 
			
		||||
            $currentForwardSchedulePiece =
 | 
			
		||||
                $this->scheduleSequence(
 | 
			
		||||
                    array(
 | 
			
		||||
                            new ScheduleStep(
 | 
			
		||||
                                sprintf("team perf to perf diff %d", $i),
 | 
			
		||||
                                &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$i], 0),
 | 
			
		||||
                                $currentTeamPerfToTeamPerfDiff, 0),
 | 
			
		||||
                            new ScheduleStep(
 | 
			
		||||
                                sprintf("greater than or within result factor %d", $i),
 | 
			
		||||
                                &$teamDifferencesComparisonLayerLocalFactors[$i], 0),
 | 
			
		||||
                                $currentTeamDiffComparison, 0),
 | 
			
		||||
                            new ScheduleStep(
 | 
			
		||||
                                sprintf("team perf to perf diff factors [%d], 2", $i),
 | 
			
		||||
                                &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$i], 2)
 | 
			
		||||
                                $currentTeamPerfToTeamPerfDiff, 2)
 | 
			
		||||
                        ), sprintf("current forward schedule piece %d", $i));
 | 
			
		||||
 | 
			
		||||
            $forwardScheduleList[] = $currentForwardSchedulePiece;
 | 
			
		||||
 
 | 
			
		||||
@@ -28,14 +28,16 @@ class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLaye
 | 
			
		||||
        $inputVariablesGroups = &$this->getInputVariablesGroups();
 | 
			
		||||
        foreach ($inputVariablesGroups as &$currentTeam)
 | 
			
		||||
        {
 | 
			
		||||
            $teamPerformance = &$this->createOutputVariable($currentTeam);
 | 
			
		||||
            $newSumFactor = $this->createPlayerToTeamSumFactor($currentTeam, $teamPerformance);
 | 
			
		||||
            $localCurrentTeam = &$currentTeam;
 | 
			
		||||
            $teamPerformance = &$this->createOutputVariable($localCurrentTeam);
 | 
			
		||||
            $newSumFactor = $this->createPlayerToTeamSumFactor($localCurrentTeam, $teamPerformance);
 | 
			
		||||
            
 | 
			
		||||
            $this->addLayerFactor($newSumFactor);
 | 
			
		||||
 | 
			
		||||
            // REVIEW: Does it make sense to have groups of one?
 | 
			
		||||
            $outputVariablesGroups = &$this->getOutputVariablesGroups();
 | 
			
		||||
            $outputVariablesGroups[] = array($teamPerformance);
 | 
			
		||||
        }
 | 
			
		||||
        }        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createPriorSchedule()
 | 
			
		||||
@@ -58,7 +60,8 @@ class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLaye
 | 
			
		||||
        $weights = array_map(
 | 
			
		||||
                        function($v)
 | 
			
		||||
                        {
 | 
			
		||||
                            return PartialPlay::getPartialPlayPercentage($v->getKey());
 | 
			
		||||
                            $player = &$v->getKey();
 | 
			
		||||
                            return PartialPlay::getPartialPlayPercentage($player);
 | 
			
		||||
                        },
 | 
			
		||||
                        $teamMembers);
 | 
			
		||||
 | 
			
		||||
@@ -76,17 +79,18 @@ class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLaye
 | 
			
		||||
        $localFactors = &$this->getLocalFactors();
 | 
			
		||||
        foreach($localFactors as &$currentFactor)
 | 
			
		||||
        {
 | 
			
		||||
            $numberOfMessages = $currentFactor->getNumberOfMessages();
 | 
			
		||||
            $localCurrentFactor = &$currentFactor;
 | 
			
		||||
            $numberOfMessages = $localCurrentFactor->getNumberOfMessages();
 | 
			
		||||
            for($currentIteration = 1; $currentIteration < $numberOfMessages; $currentIteration++)
 | 
			
		||||
            {
 | 
			
		||||
                $allFactors[] = new ScheduleStep("team sum perf @" . $currentIteration,
 | 
			
		||||
                                                 $currentFactor, $currentIteration);
 | 
			
		||||
                                                 $localCurrentFactor, $currentIteration);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return $this->scheduleSequence($allFactors, "all of the team's sum iterations");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createOutputVariable(&$team)
 | 
			
		||||
    private function &createOutputVariable(&$team)
 | 
			
		||||
    {
 | 
			
		||||
        $memberNames = \array_map(function ($currentPlayer)
 | 
			
		||||
                                  {
 | 
			
		||||
@@ -95,7 +99,8 @@ class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLaye
 | 
			
		||||
                                  $team);
 | 
			
		||||
 | 
			
		||||
        $teamMemberNames = \join(", ", $memberNames);
 | 
			
		||||
        return $this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team[" . $teamMemberNames . "]'s performance");
 | 
			
		||||
        $outputVariable = &$this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team[" . $teamMemberNames . "]'s performance");
 | 
			
		||||
        return $outputVariable;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ class PlayerPriorValuesToSkillsLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
{
 | 
			
		||||
    private $_teams;
 | 
			
		||||
 | 
			
		||||
    public function __construct(TrueSkillFactorGraph &$parentGraph, &$teams)
 | 
			
		||||
    public function __construct(TrueSkillFactorGraph &$parentGraph, array &$teams)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($parentGraph);
 | 
			
		||||
        $this->_teams = $teams;
 | 
			
		||||
@@ -35,14 +35,16 @@ class PlayerPriorValuesToSkillsLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
        $teams = &$this->_teams;
 | 
			
		||||
        foreach ($teams as &$currentTeam)
 | 
			
		||||
        {
 | 
			
		||||
            $localCurrentTeam = &$currentTeam;
 | 
			
		||||
            $currentTeamSkills = array();
 | 
			
		||||
 | 
			
		||||
            $currentTeamAllPlayers = &$currentTeam->getAllPlayers();
 | 
			
		||||
            $currentTeamAllPlayers = $localCurrentTeam->getAllPlayers();
 | 
			
		||||
            foreach ($currentTeamAllPlayers as &$currentTeamPlayer)
 | 
			
		||||
            {
 | 
			
		||||
                $currentTeamPlayerRating = $currentTeam->getRating($currentTeamPlayer);
 | 
			
		||||
                $playerSkill = $this->createSkillOutputVariable($currentTeamPlayer);
 | 
			
		||||
                $priorFactor = $this->createPriorFactor($currentTeamPlayer, $currentTeamPlayerRating, $playerSkill);
 | 
			
		||||
                $localCurrentTeamPlayer = &$currentTeamPlayer;
 | 
			
		||||
                $currentTeamPlayerRating = $currentTeam->getRating($localCurrentTeamPlayer);
 | 
			
		||||
                $playerSkill = &$this->createSkillOutputVariable($localCurrentTeamPlayer);
 | 
			
		||||
                $priorFactor = &$this->createPriorFactor($localCurrentTeamPlayer, $currentTeamPlayerRating, $playerSkill);
 | 
			
		||||
                $this->addLayerFactor($priorFactor);
 | 
			
		||||
                $currentTeamSkills[] = $playerSkill;
 | 
			
		||||
            }
 | 
			
		||||
@@ -73,11 +75,12 @@ class PlayerPriorValuesToSkillsLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
                                       $skillsVariable);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createSkillOutputVariable($key)
 | 
			
		||||
    private function &createSkillOutputVariable(&$key)
 | 
			
		||||
    {
 | 
			
		||||
        $parentFactorGraph = &$this->getParentFactorGraph();
 | 
			
		||||
        $variableFactory = &$parentFactorGraph->getVariableFactory();
 | 
			
		||||
        return $variableFactory->createKeyedVariable($key, $key . "'s skill");
 | 
			
		||||
        $skillOutputVariable = &$variableFactory->createKeyedVariable($key, $key . "'s skill");
 | 
			
		||||
        return $skillOutputVariable;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,9 +31,10 @@ class PlayerSkillsToPerformancesLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
 | 
			
		||||
            foreach ($currentTeam as &$playerSkillVariable)
 | 
			
		||||
            {
 | 
			
		||||
                $currentPlayer = &$playerSkillVariable->getKey();
 | 
			
		||||
                $playerPerformance = $this->createOutputVariable($currentPlayer);
 | 
			
		||||
                $newLikelihoodFactor = $this->createLikelihood($playerSkillVariable, $playerPerformance);
 | 
			
		||||
                $localPlayerSkillVariable = &$playerSkillVariable;
 | 
			
		||||
                $currentPlayer = &$localPlayerSkillVariable->getKey();
 | 
			
		||||
                $playerPerformance = &$this->createOutputVariable($currentPlayer);
 | 
			
		||||
                $newLikelihoodFactor = $this->createLikelihood($localPlayerSkillVariable, $playerPerformance);
 | 
			
		||||
                $this->addLayerFactor($newLikelihoodFactor);
 | 
			
		||||
                $currentTeamPlayerPerformances[] = $playerPerformance;
 | 
			
		||||
            }            
 | 
			
		||||
@@ -47,9 +48,10 @@ class PlayerSkillsToPerformancesLayer extends TrueSkillFactorGraphLayer
 | 
			
		||||
        return new GaussianLikelihoodFactor(square($this->getParentFactorGraph()->getGameInfo()->getBeta()), $playerPerformance, $playerSkill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createOutputVariable(&$key)
 | 
			
		||||
    private function &createOutputVariable(&$key)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getParentFactorGraph()->getVariableFactory()->createKeyedVariable($key, $key . "'s performance");
 | 
			
		||||
        $outputVariable = &$this->getParentFactorGraph()->getVariableFactory()->createKeyedVariable($key, $key . "'s performance");
 | 
			
		||||
        return $outputVariable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createPriorSchedule()
 | 
			
		||||
 
 | 
			
		||||
@@ -46,9 +46,10 @@ class TeamPerformancesToTeamPerformanceDifferencesLayer extends TrueSkillFactorG
 | 
			
		||||
        return new GaussianWeightedSumFactor($output, $teams, $weights);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createOutputVariable()
 | 
			
		||||
    private function &createOutputVariable()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team performance difference");
 | 
			
		||||
        $outputVariable = &$this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team performance difference");
 | 
			
		||||
        return $outputVariable;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user