From 5cb1919c2180125115cf048821cbbe36e595796a Mon Sep 17 00:00:00 2001 From: Jeff Moser Date: Sun, 26 Sep 2010 21:43:17 -0400 Subject: [PATCH] Start of journey to actually give real names to factor graph variables using more PHP style --- PHPSkills/FactorGraphs/VariableFactory.php | 8 ++-- PHPSkills/Player.php | 2 +- .../Factors/GaussianWeightedSumFactor.php | 39 ++++++++++++++++++- ...yerPerformancesToTeamPerformancesLayer.php | 13 +++++-- .../Layers/PlayerPriorValuesToSkillsLayer.php | 2 +- .../PlayerSkillsToPerformancesLayer.php | 2 +- 6 files changed, 53 insertions(+), 13 deletions(-) diff --git a/PHPSkills/FactorGraphs/VariableFactory.php b/PHPSkills/FactorGraphs/VariableFactory.php index 74cb315..3d72f8e 100644 --- a/PHPSkills/FactorGraphs/VariableFactory.php +++ b/PHPSkills/FactorGraphs/VariableFactory.php @@ -14,17 +14,17 @@ class VariableFactory $this->_variablePriorInitializer = &$variablePriorInitializer; } - public function createBasicVariable() + public function createBasicVariable($name) { $initializer = $this->_variablePriorInitializer; - $newVar = new Variable("variable", $initializer()); + $newVar = new Variable($name, $initializer()); return $newVar; } - public function createKeyedVariable($key) + public function createKeyedVariable($key, $name) { $initializer = $this->_variablePriorInitializer; - $newVar = new KeyedVariable($key, "key variable", $initializer()); + $newVar = new KeyedVariable($key, $name, $initializer()); return $newVar; } } diff --git a/PHPSkills/Player.php b/PHPSkills/Player.php index 2d44e74..9819101 100644 --- a/PHPSkills/Player.php +++ b/PHPSkills/Player.php @@ -71,7 +71,7 @@ class Player implements ISupportPartialPlay, ISupportPartialUpdate { if ($this->_Id != null) { - return $this->_Id; + return (string)$this->_Id; } return parent::__toString(); diff --git a/PHPSkills/TrueSkill/Factors/GaussianWeightedSumFactor.php b/PHPSkills/TrueSkill/Factors/GaussianWeightedSumFactor.php index 61f789f..3e221f5 100644 --- a/PHPSkills/TrueSkill/Factors/GaussianWeightedSumFactor.php +++ b/PHPSkills/TrueSkill/Factors/GaussianWeightedSumFactor.php @@ -227,9 +227,44 @@ class GaussianWeightedSumFactor extends GaussianFactor $updatedVariables); } - private static function createName($sumVariable, $variablesToSum, $variableWeights) + private static function createName($sumVariable, $variablesToSum, $weights) { - return "TODO"; + // TODO: Perf? Use PHP equivalent of StringBuilder? implode on arrays? + $result = (string)$sumVariable; + $result .= ' = '; + + $totalVars = count($variablesToSum); + for($i = 0; $i < $totalVars; $i++) + { + $isFirst = ($i == 0); + + if($isFirst && ($weights[$i] < 0)) + { + $result .= '-'; + } + + $absValue = sprintf("%.2f", \abs($weights[$i])); // 0.00? + $result .= $absValue; + $result .= "*["; + $result .= (string)$variablesToSum[$i]; + $result .= ']'; + + $isLast = ($i == ($totalVars - 1)); + + if(!$isLast) + { + if($weights[$i + 1] >= 0) + { + $result .= ' + '; + } + else + { + $result .= ' - '; + } + } + } + + return $result; } } diff --git a/PHPSkills/TrueSkill/Layers/PlayerPerformancesToTeamPerformancesLayer.php b/PHPSkills/TrueSkill/Layers/PlayerPerformancesToTeamPerformancesLayer.php index 7803a03..f31dbbd 100644 --- a/PHPSkills/TrueSkill/Layers/PlayerPerformancesToTeamPerformancesLayer.php +++ b/PHPSkills/TrueSkill/Layers/PlayerPerformancesToTeamPerformancesLayer.php @@ -27,7 +27,7 @@ class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLaye { foreach ($this->getInputVariablesGroups() as $currentTeam) { - $teamPerformance = &$this->createOutputVariable($currentTeam); + $teamPerformance = $this->createOutputVariable($currentTeam); $newSumFactor = $this->createPlayerToTeamSumFactor($currentTeam, $teamPerformance); $this->addLayerFactor($newSumFactor); @@ -83,9 +83,14 @@ class PlayerPerformancesToTeamPerformancesLayer extends TrueSkillFactorGraphLaye private function createOutputVariable(&$team) { - ///$teamMemberNames = String.Join(", ", team.Select(teamMember => teamMember.Key.ToString()).ToArray()); - $teamMemberNames = "TODO"; - return $this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team[{0}]'s performance", $teamMemberNames); + $memberNames = \array_map(function ($currentPlayer) + { + return (string)($currentPlayer->getKey()); + }, + $team); + + $teamMemberNames = \join(", ", $memberNames); + return $this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team[" . $teamMemberNames . "]'s performance"); } } diff --git a/PHPSkills/TrueSkill/Layers/PlayerPriorValuesToSkillsLayer.php b/PHPSkills/TrueSkill/Layers/PlayerPriorValuesToSkillsLayer.php index ef4db9c..1e0843a 100644 --- a/PHPSkills/TrueSkill/Layers/PlayerPriorValuesToSkillsLayer.php +++ b/PHPSkills/TrueSkill/Layers/PlayerPriorValuesToSkillsLayer.php @@ -69,7 +69,7 @@ class PlayerPriorValuesToSkillsLayer extends TrueSkillFactorGraphLayer { $parentFactorGraph = $this->getParentFactorGraph(); $variableFactory = $parentFactorGraph->getVariableFactory(); - return $variableFactory->createKeyedVariable($key, "{0}'s skill", $key); + return $variableFactory->createKeyedVariable($key, $key . "'s skill"); } } diff --git a/PHPSkills/TrueSkill/Layers/PlayerSkillsToPerformancesLayer.php b/PHPSkills/TrueSkill/Layers/PlayerSkillsToPerformancesLayer.php index f9f8b45..65dd08e 100644 --- a/PHPSkills/TrueSkill/Layers/PlayerSkillsToPerformancesLayer.php +++ b/PHPSkills/TrueSkill/Layers/PlayerSkillsToPerformancesLayer.php @@ -44,7 +44,7 @@ class PlayerSkillsToPerformancesLayer extends TrueSkillFactorGraphLayer private function createOutputVariable(&$key) { - return $this->getParentFactorGraph()->getVariableFactory()->createKeyedVariable($key, "{0}'s performance", $key); + return $this->getParentFactorGraph()->getVariableFactory()->createKeyedVariable($key, $key . "'s performance"); } public function createPriorSchedule()