getInputVariablesGroups(); $inputVariablesGroupsCount = count($inputVariablesGroups); $outputVariablesGroup = &$this->getOutputVariablesGroups(); 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[] = 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() { $outputVariable = $this->getParentFactorGraph()->getVariableFactory()->createBasicVariable("Team performance difference"); return $outputVariable; } }