示例#1
0
 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();
 }
示例#2
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),
            };
        }
 public AllDemandsScheduler(SchedulerModel model, CostFunctionBase costFunction, CompositeStateCalculator stateCalculator, WorkEligibilityChecker workEligibilityChecker)
     : base(model, costFunction, workEligibilityChecker)
 {
     _stateCalculator = stateCalculator ?? throw new ArgumentNullException(nameof(stateCalculator));
 }
示例#4
0
 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));
 }