/// <summary> /// Prepares for the next scheduling iteration. This is invoked /// at the end of a scheduling iteration. It must return false /// if the scheduling strategy should stop exploring. /// </summary> /// <returns>True to start the next iteration</returns> public override bool PrepareForNextIteration() { ScheduleLength = Math.Max(ScheduleLength, ScheduledSteps); ScheduledSteps = 0; RemainingDelays.Clear(); for (int idx = 0; idx < MaxDelays; idx++) { RemainingDelays.Add(RandomNumberGenerator.Next(ScheduleLength)); } RemainingDelays.Sort(); CurrentIterationDelays.Clear(); CurrentIterationDelays.AddRange(RemainingDelays); return(true); }
/// <summary> /// Prepares for the next scheduling iteration. This is invoked /// at the end of a scheduling iteration. It must return false /// if the scheduling strategy should stop exploring. /// </summary> /// <returns>True to start the next iteration</returns> public override bool PrepareForNextIteration() { ScheduleLength = Math.Max(ScheduleLength, ScheduledSteps); ScheduledSteps = 0; var bound = Math.Min(MaxScheduledSteps, ScheduleLength); for (var idx = 0; idx < MaxDelays; idx++) { if (DelaysCache[idx] < bound) { DelaysCache[idx] = DelaysCache[idx] + 1; break; } DelaysCache[idx] = 0; } RemainingDelays.Clear(); RemainingDelays.AddRange(DelaysCache); RemainingDelays.Sort(); return(true); }