Esempio n. 1
0
        protected bool TryGenerateSolution()
        {
            _shiftManager = _dataManager.ShiftManager;
            _jobManager   = _dataManager.JobManager;
            _zoneManager  = _dataManager.ZoneManager;

            _shifts = _shiftManager.GetShifts().ToArray();
            var rootJobs = _jobManager.RootJobs;
            var jobs     = _jobManager.GetJobs();

            _jobs = new List <IJob>(jobs);

            _zones = new List <IZone>(_zoneManager.GetZones());

            _jobPriorityFunction = new SlackTimeRemainingJobPriorityFunction();
            _availableJobs       = new JobProcessorList(_jobPriorityFunction);

            foreach (var job in rootJobs)
            {
                _availableJobs.Enqueue(job);
            }

            _timepoints   = new Dictionary <int, List <InWorkEvent> >();
            _inWorkEvents = new List <InWorkEvent>();

            int iteration = InitializeNextIteration(_shifts[0]);

            while (_jobs.Any() && iteration < MaxIterationCount)
            {
                // check to see if we have any events expiring
                ProcessCompletingJobs(iteration);

                // check to see if we have any new jobs we can work on
                iteration = ProcessJobs(iteration);

                // increment iteration counter
                iteration = IncrementIteration(iteration);
            }

            return(true);
        }
Esempio n. 2
0
        protected bool TryGenerateSolution()
        {
            _shiftManager = _dataManager.ShiftManager;
            _jobManager = _dataManager.JobManager;
            _zoneManager = _dataManager.ZoneManager;

            _shifts = _shiftManager.GetShifts().ToArray();
            var rootJobs = _jobManager.RootJobs;
            var jobs = _jobManager.GetJobs();

            _jobs = new List<IJob>(jobs);

            _zones = new List<IZone>(_zoneManager.GetZones());

            _jobPriorityFunction = new SlackTimeRemainingJobPriorityFunction();
            _availableJobs = new JobProcessorList(_jobPriorityFunction);

            foreach (var job in rootJobs)
            {
                _availableJobs.Enqueue(job);
            }

            _timepoints = new Dictionary<int, List<InWorkEvent>>();
            _inWorkEvents = new List<InWorkEvent>();

            int iteration = InitializeNextIteration(_shifts[0]);

            while (_jobs.Any() && iteration < MaxIterationCount)
            {
                // check to see if we have any events expiring
                ProcessCompletingJobs(iteration);
                
                // check to see if we have any new jobs we can work on
                iteration = ProcessJobs(iteration);

                // increment iteration counter
                iteration = IncrementIteration(iteration);
            }

            return true;
        }