@Override public void buildLayer() { teamPerformancesToTeamPerformanceDifferencesLayer.setRawInputVariablesGroups( getInputVariablesGroups()); teamPerformancesToTeamPerformanceDifferencesLayer.buildLayer(); teamDifferencesComparisonLayer.setRawInputVariablesGroups( teamPerformancesToTeamPerformanceDifferencesLayer.getRawOutputVariablesGroups()); teamDifferencesComparisonLayer.buildLayer(); }
@Override public Schedule<GaussianDistribution> createPriorSchedule() { Schedule<GaussianDistribution> loop; switch (getInputVariablesGroups().size()) { case 0: case 1: throw new IllegalArgumentException(); case 2: loop = createTwoTeamInnerPriorLoopSchedule(); break; default: loop = createMultipleTeamInnerPriorLoopSchedule(); break; } // When dealing with differences, there are always (n-1) differences, so add in the 1 int totalTeamDifferences = teamPerformancesToTeamPerformanceDifferencesLayer.getLocalFactors().size(); Collection<Schedule<GaussianDistribution>> schedules = new ArrayList<Schedule<GaussianDistribution>>(); schedules.add(loop); schedules.add( new ScheduleStep<>( "teamPerformanceToPerformanceDifferenceFactors[0] @ 1", teamPerformancesToTeamPerformanceDifferencesLayer.getLocalFactors().get(0), 1)); schedules.add( new ScheduleStep<>( String.format( "teamPerformanceToPerformanceDifferenceFactors[teamTeamDifferences = %d - 1] @ 2", totalTeamDifferences), teamPerformancesToTeamPerformanceDifferencesLayer .getLocalFactors() .get(totalTeamDifferences - 1), 2)); return new ScheduleSequence<>("inner schedule", schedules); }
private Schedule<GaussianDistribution> createTwoTeamInnerPriorLoopSchedule() { Collection<Schedule<GaussianDistribution>> schedules = new ArrayList<>(); schedules.add( new ScheduleStep<>( "send team perf to perf differences", teamPerformancesToTeamPerformanceDifferencesLayer.getLocalFactors().get(0), 0)); schedules.add( new ScheduleStep<>( "send to greater than or within factor", teamDifferencesComparisonLayer.getLocalFactors().get(0), 0)); return ScheduleSequence(schedules, "loop of just two teams inner sequence"); }
private Schedule<GaussianDistribution> createMultipleTeamInnerPriorLoopSchedule() { int totalTeamDifferences = teamPerformancesToTeamPerformanceDifferencesLayer.getLocalFactors().size(); List<Schedule<GaussianDistribution>> forwardScheduleList = new ArrayList<>(); for (int i = 0; i < totalTeamDifferences - 1; i++) { Collection<Schedule<GaussianDistribution>> schedules = new ArrayList<>(); schedules.add( new ScheduleStep<>( String.format("team perf to perf diff %d", i), teamPerformancesToTeamPerformanceDifferencesLayer.getLocalFactors().get(i), 0)); schedules.add( new ScheduleStep<>( String.format("greater than or within result factor %d", i), teamDifferencesComparisonLayer.getLocalFactors().get(i), 0)); schedules.add( new ScheduleStep<>( String.format("team perf to perf diff factors [%d], 2", i), teamPerformancesToTeamPerformanceDifferencesLayer.getLocalFactors().get(i), 2)); Schedule<GaussianDistribution> currentForwardSchedulePiece = ScheduleSequence(schedules, "current forward schedule piece %d", i); forwardScheduleList.add(currentForwardSchedulePiece); } ScheduleSequence<GaussianDistribution> forwardSchedule = new ScheduleSequence<>("forward schedule", forwardScheduleList); List<Schedule<GaussianDistribution>> backwardScheduleList = new ArrayList<>(); for (int i = 0; i < totalTeamDifferences - 1; i++) { Collection<Schedule<GaussianDistribution>> schedules = new ArrayList<>(); schedules.add( new ScheduleStep<>( String.format( "teamPerformanceToPerformanceDifferenceFactors[totalTeamDifferences - 1 - %d] @ 0", i), teamPerformancesToTeamPerformanceDifferencesLayer .getLocalFactors() .get(totalTeamDifferences - 1 - i), 0)); schedules.add( new ScheduleStep<>( String.format( "greaterThanOrWithinResultFactors[totalTeamDifferences - 1 - %d] @ 0", i), teamDifferencesComparisonLayer.getLocalFactors().get(totalTeamDifferences - 1 - i), 0)); schedules.add( new ScheduleStep<>( String.format( "teamPerformanceToPerformanceDifferenceFactors[totalTeamDifferences - 1 - %d] @ 1", i), teamPerformancesToTeamPerformanceDifferencesLayer .getLocalFactors() .get(totalTeamDifferences - 1 - i), 1)); ScheduleSequence<GaussianDistribution> currentBackwardSchedulePiece = new ScheduleSequence<>("current backward schedule piece", schedules); backwardScheduleList.add(currentBackwardSchedulePiece); } ScheduleSequence<GaussianDistribution> backwardSchedule = new ScheduleSequence<>("backward schedule", backwardScheduleList); Collection<Schedule<GaussianDistribution>> schedules = new ArrayList<>(); schedules.add(forwardSchedule); schedules.add(backwardSchedule); ScheduleSequence<GaussianDistribution> forwardBackwardScheduleToLoop = new ScheduleSequence<>("forward Backward Schedule To Loop", schedules); final double initialMaxDelta = 0.0001; return new ScheduleLoop<>( String.format("loop with max delta of %f", initialMaxDelta), forwardBackwardScheduleToLoop, initialMaxDelta); }