_TeamPerformancesToTeamPerformanceDifferencesLayer = $teamPerformancesToPerformanceDifferences; $this->_TeamDifferencesComparisonLayer = $teamDifferencesComparisonLayer; } public function buildLayer() { $inputVariablesGroups = &$this->getInputVariablesGroups(); $this->_TeamPerformancesToTeamPerformanceDifferencesLayer->setInputVariablesGroups($inputVariablesGroups); $this->_TeamPerformancesToTeamPerformanceDifferencesLayer->buildLayer(); $teamDifferencesOutputVariablesGroups = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getOutputVariablesGroups(); $this->_TeamDifferencesComparisonLayer->setInputVariablesGroups($teamDifferencesOutputVariablesGroups); $this->_TeamDifferencesComparisonLayer->buildLayer(); } public function createPriorSchedule() { // BLOG about $loop switch (count($this->getInputVariablesGroups())) { case 0: case 1: throw new InvalidOperationException(); case 2: $loop = $this->createTwoTeamInnerPriorLoopSchedule(); break; default: $loop = $this->createMultipleTeamInnerPriorLoopSchedule(); break; } // When dealing with differences, there are always (n-1) differences, so add in the 1 $totalTeamDifferences = count($this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors()); $totalTeams = $totalTeamDifferences + 1; $localFactors = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors(); $innerSchedule = new ScheduleSequence( "inner schedule", array( $loop, new ScheduleStep( "teamPerformanceToPerformanceDifferenceFactors[0] @ 1", &$localFactors[0], 1), new ScheduleStep( sprintf("teamPerformanceToPerformanceDifferenceFactors[teamTeamDifferences = %d - 1] @ 2", $totalTeamDifferences), &$localFactors[$totalTeamDifferences - 1], 2) ) ); return $innerSchedule; } private function createTwoTeamInnerPriorLoopSchedule() { $teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors(); $teamDifferencesComparisonLayerLocalFactors = &$this->_TeamDifferencesComparisonLayer->getLocalFactors(); $itemsToSequence = array( new ScheduleStep( "send team perf to perf differences", &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[0], 0), new ScheduleStep( "send to greater than or within factor", &$teamDifferencesComparisonLayerLocalFactors[0], 0) ); return $this->scheduleSequence( $itemsToSequence, "loop of just two teams inner sequence"); } private function createMultipleTeamInnerPriorLoopSchedule() { $totalTeamDifferences = count($this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors()); $forwardScheduleList = array(); for ($i = 0; $i < $totalTeamDifferences - 1; $i++) { $teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors(); $teamDifferencesComparisonLayerLocalFactors = &$this->_TeamDifferencesComparisonLayer->getLocalFactors(); $currentForwardSchedulePiece = $this->scheduleSequence( array( new ScheduleStep( sprintf("team perf to perf diff %d", $i), &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$i], 0), new ScheduleStep( sprintf("greater than or within result factor %d", $i), &$teamDifferencesComparisonLayerLocalFactors[$i], 0), new ScheduleStep( sprintf("team perf to perf diff factors [%d], 2", $i), &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$i], 2) ), sprintf("current forward schedule piece %d", $i)); $forwardScheduleList[] = $currentForwardSchedulePiece; } $forwardSchedule = new ScheduleSequence("forward schedule", $forwardScheduleList); $backwardScheduleList = array(); for ($i = 0; $i < $totalTeamDifferences - 1; $i++) { $teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors = &$this->_TeamPerformancesToTeamPerformanceDifferencesLayer->getLocalFactors(); $teamDifferencesComparisonLayerLocalFactors = &$this->_TeamDifferencesComparisonLayer->getLocalFactors(); $differencesFactor = &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$totalTeamDifferences - 1 - $i]; $comparisonFactor = &$teamDifferencesComparisonLayerLocalFactors[$totalTeamDifferences - 1 - $i]; $performancesToDifferencesFactor = &$teamPerformancesToTeamPerformanceDifferencesLayerLocalFactors[$totalTeamDifferences - 1 - $i]; $currentBackwardSchedulePiece = new ScheduleSequence( "current backward schedule piece", array( new ScheduleStep( sprintf("teamPerformanceToPerformanceDifferenceFactors[totalTeamDifferences - 1 - %d] @ 0", $i), $differencesFactor, 0), new ScheduleStep( sprintf("greaterThanOrWithinResultFactors[totalTeamDifferences - 1 - %d] @ 0", $i), $comparisonFactor, 0), new ScheduleStep( sprintf("teamPerformanceToPerformanceDifferenceFactors[totalTeamDifferences - 1 - %d] @ 1", $i), $performancesToDifferencesFactor, 1) )); $backwardScheduleList[] = $currentBackwardSchedulePiece; } $backwardSchedule = new ScheduleSequence("backward schedule", $backwardScheduleList); $forwardBackwardScheduleToLoop = new ScheduleSequence( "forward Backward Schedule To Loop", array($forwardSchedule, $backwardSchedule)); $initialMaxDelta = 0.0001; $loop = new ScheduleLoop( sprintf("loop with max delta of %f", $initialMaxDelta), $forwardBackwardScheduleToLoop, $initialMaxDelta); return $loop; } } ?>