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), }; }
private CompositeCostFunction CreateCompositeCostFunction(SchedulerModel model) { var(maxShiftOffRequestWeight, maxShiftOnRequestWeight) = ShiftRequestCostFunction.GetMaxWeights(model); var costFunctions = new CostFunctionBase[] { new WeekendWorkCostFunction(_model.Calendar), new TotalWorkTimeCostFunction(_model, _workEligibilityChecker, _stateCalculator), new ShiftRequestCostFunction(maxShiftOffRequestWeight, maxShiftOnRequestWeight), new ConsecutiveShiftCostFunction(_model.Calendar), new DayOffCostFunction(), new ValidShiftCostFunction(), new MaxShiftCostFunction(), new MinRestTimeCostFunction() }; return(new CompositeCostFunction(costFunctions)); }
public RemoveUnderMinConsecutiveShiftsScheduler(SchedulerModel model, CostFunctionBase costFunction, WorkEligibilityChecker workEligibilityChecker) : base(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)); }
protected SchedulerBase(SchedulerModel model, CostFunctionBase costFunction, WorkEligibilityChecker workEligibilityChecker) { _model = model ?? throw new ArgumentNullException(nameof(model)); _costFunction = costFunction ?? throw new ArgumentNullException(nameof(costFunction)); _workEligibilityChecker = workEligibilityChecker ?? throw new ArgumentNullException(nameof(workEligibilityChecker)); }
public UntilMinTotalWorkTimeScheduler(SchedulerModel model, CompositeStateCalculator stateCalculator, WorkEligibilityChecker workEligibilityChecker, CostFunctionBase costFunction) : base(model, costFunction, workEligibilityChecker) { _stateCalculator = stateCalculator ?? throw new ArgumentNullException(nameof(stateCalculator)); }