/// <summary> /// Creates a scheduler for the given system and simulation scenario /// </summary> /// <param name="scheduleEvaluator"></param> public Scheduler(Evaluator scheduleEvaluator) { ScheduleEvaluator = scheduleEvaluator; _startTime = SimParameters.SimStartSeconds; _endTime = SimParameters.SimEndSeconds; _stepLength = SchedParameters.SimStepSeconds; _maxNumSchedules = SchedParameters.MaxNumScheds; _numSchedCropTo = SchedParameters.NumSchedCropTo; }
/// <summary> /// Remove Schedules with the worst scores from the List of SystemSchedules so that there are only _maxNumSchedules. /// </summary> /// <param name="schedulesToCrop"></param> /// <param name="scheduleEvaluator"></param> /// <param name="emptySched"></param> public void CropSchedules(List<SystemSchedule> schedulesToCrop, Evaluator scheduleEvaluator, SystemSchedule emptySched) { // Evaluate the schedules and set their values foreach (SystemSchedule systemSchedule in schedulesToCrop) systemSchedule.ScheduleValue = scheduleEvaluator.Evaluate(systemSchedule); // Sort the sysScheds by their values schedulesToCrop.Sort((x, y) => x.ScheduleValue.CompareTo(y.ScheduleValue)); // Delete the sysScheds that don't fit int numSched = schedulesToCrop.Count; for (int i = 0; i < numSched - _numSchedCropTo; i++) { schedulesToCrop.Remove(schedulesToCrop[0]); } }