getInputVariablesGroups(); $inputVariablesGroupsCount = count($inputVariablesGroups); for ($i = 0; $i < $inputVariablesGroupsCount - 1; $i++) { $strongerTeam = $inputVariablesGroups[$i][0]; $weakerTeam = $inputVariablesGroups[$i + 1][0]; $currentDifference = &$this->createOutputVariable(); $newDifferencesFactor = &$this->createTeamPerformanceToDifferenceFactor($strongerTeam, $weakerTeam, $currentDifference); $this->addLayerFactor($newDifferencesFactor); // REVIEW: Does it make sense to have groups of one? $outputVariablesGroup = &$this->getOutputVariablesGroups(); $outputVariablesGroup[] = array($currentDifference); } } private function createTeamPerformanceToDifferenceFactor( Variable &$strongerTeam, Variable &$weakerTeam, Variable &$output) { $teams = array($strongerTeam, $weakerTeam); $weights = array(1.0, -1.0); return new GaussianWeightedSumFactor($output, $teams, $weights); } private function createOutputVariable() { return $this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team performance difference"); } } ?>