public TotalWorkTimeCostFunction(SchedulerModel model, WorkEligibilityChecker workEligibilityChecker, CompositeStateCalculator stateCalculator) { _underMinWorkTimeCost = DefaultCost * 0.5; _model = model ?? throw new ArgumentNullException(nameof(model)); _workEligibilityChecker = workEligibilityChecker ?? throw new ArgumentNullException(nameof(workEligibilityChecker)); _stateCalculator = stateCalculator ?? throw new ArgumentNullException(nameof(stateCalculator)); _longestShift = _model.Demands.Values .SelectMany(dArr => dArr) .Select(d => d.Shift) .OrderByDescending(s => s.Duration) .First(); }
public SchedulerAlgorithm(SchedulerModel model) { _model = model; _stateCalculator = new CompositeStateCalculator(_model.SchedulePeriod, _model.Calendar); _workEligibilityChecker = new WorkEligibilityChecker(_model); _costFunction = CreateCompositeCostFunction(_model); _schedulers = new SchedulerBase[] { //new MinDemandsScheduler(_model, _costFunction, _workEligibilityChecker, _stateCalculator), //new WeekendScheduler(_model, _costFunction, _workEligibilityChecker, _stateCalculator), new AllDemandsScheduler(_model, _costFunction, _stateCalculator, _workEligibilityChecker), new UntilMinTotalWorkTimeScheduler(_model, _stateCalculator, _workEligibilityChecker, _costFunction), new ReplaceSingleWeekendsWithDoubleWeekendsScheduler(_model, _stateCalculator, _workEligibilityChecker, _costFunction), new RemoveUnderMinConsecutiveShiftsScheduler(_model, _costFunction, _workEligibilityChecker), }; }
public AllDemandsScheduler(SchedulerModel model, CostFunctionBase costFunction, CompositeStateCalculator stateCalculator, WorkEligibilityChecker workEligibilityChecker) : base(model, costFunction, workEligibilityChecker) { _stateCalculator = stateCalculator ?? throw new ArgumentNullException(nameof(stateCalculator)); }
public ReplaceSingleWeekendsWithDoubleWeekendsScheduler(SchedulerModel model, CompositeStateCalculator stateCalculator, WorkEligibilityChecker workEligibilityChecker, CostFunctionBase costFunction) : base(model, costFunction, workEligibilityChecker) { _stateCalculator = stateCalculator ?? throw new ArgumentNullException(nameof(stateCalculator)); }
public UntilMinTotalWorkTimeScheduler(SchedulerModel model, CompositeStateCalculator stateCalculator, WorkEligibilityChecker workEligibilityChecker, CostFunctionBase costFunction) : base(model, costFunction, workEligibilityChecker) { _stateCalculator = stateCalculator ?? throw new ArgumentNullException(nameof(stateCalculator)); }