示例#1
0
        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),
            };
        }
示例#2
0
        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));
        }
示例#3
0
 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));
 }
示例#5
0
 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));
 }