Esempio n. 1
0
        public ConstraintSolverResult ScheduleDataSet(ProjectDataSet dataSet, IConstraints constraints, GreedyActivityStrategy strategy)
        {
            var result = new ConstraintSolverResult(constraints);

            try
            {
                var cp = new CriticalPathHelper();
                cp.OrderActivitySchedule(dataSet, result);
                foreach (var a in result.Schedule)
                {
                    _scheduledJobs.GetOrAdd(a.ScheduledItem.UID, a);
                }

                SetupJobsAndResources(dataSet, constraints);
                var dataManager = new SolverDataManager(dataSet, result);
                var solver      = new Solver(dataManager);

                //var results = solver.Solve(
                //    _shifts.Values.ToList(),
                //    _workers.Values.ToList(),
                //    _tools.Values.ToList(),
                //    _zones.Values,
                //    _jobs.Values,
                //    strategy, _shiftManager);

                //foreach (var job in results)
                //{
                //    var activity = _activitiesMap[job.Job.ID];
                //    var scheduledActivity = _scheduledJobs[activity.UID];

                //    var start = TimeFrame.FromMinutes(job.Start);
                //    var end = TimeFrame.FromMinutes(job.End);

                //    scheduledActivity.ScheduledStart = start;
                //    scheduledActivity.ScheduledFinish = end;

                //    //result.ActivitySchedule.AddOrUpdateItemSchedule(job.Start, scheduledActivity);
                //    //result.State = SolverResultState.OptimalSolutionFound;
                //}
                //result.State = SolverResultState.OptimalSolutionFound;
            }
            catch (Exception ex)
            {
                throw new Exception("Yikes! Error in solver!", ex);
            }

            return(result);
        }
        public async Task <ConstraintSolverResult> InitializeDataAsync()
        {
            _activitiesMap = new ConcurrentDictionary <int, IActivity>();
            _scheduledJobs = new ConcurrentDictionary <Guid, IActivitySchedule>();

            await Task.Run(() =>
            {
                var cp = new CriticalPathHelper();
                cp.OrderActivitySchedule(_model, _solverResult);

                foreach (var scheduledItem in _solverResult.Schedule)
                {
                    var activity = scheduledItem.ScheduledItem;
                    _scheduledJobs.GetOrAdd(activity.UID, scheduledItem);
                }
            });

            ShiftManager.ProcessModel(_model, _solverResult.Constraints);
            JobManager.ProcessModelActivities(_solverResult.Schedule);
            ZoneManager.ProcessZones(_model.GetZoneResources());

            return(_solverResult);
        }
        public async Task<ConstraintSolverResult> InitializeDataAsync()
        {
            _activitiesMap = new ConcurrentDictionary<int, IActivity>();
            _scheduledJobs = new ConcurrentDictionary<Guid, IActivitySchedule>();

            await Task.Run(() =>
            {
                var cp = new CriticalPathHelper();
                cp.OrderActivitySchedule(_model, _solverResult);

                foreach (var scheduledItem in _solverResult.Schedule)
                {
                    var activity = scheduledItem.ScheduledItem;
                    _scheduledJobs.GetOrAdd(activity.UID, scheduledItem);
                }
            });

            ShiftManager.ProcessModel(_model, _solverResult.Constraints);
            JobManager.ProcessModelActivities(_solverResult.Schedule);
            ZoneManager.ProcessZones(_model.GetZoneResources());

            return _solverResult;
        }
        public ConstraintSolverResult ScheduleDataSet(ProjectDataSet dataSet, IConstraints constraints, GreedyActivityStrategy strategy)
        {
            var result = new ConstraintSolverResult(constraints);

            try
            {
                var cp = new CriticalPathHelper();
                cp.OrderActivitySchedule(dataSet, result);
                foreach (var a in result.Schedule)
                {
                    _scheduledJobs.GetOrAdd(a.ScheduledItem.UID, a);
                }

                SetupJobsAndResources(dataSet, constraints);
                var dataManager = new SolverDataManager(dataSet, result);
                var solver = new Solver(dataManager);

                //var results = solver.Solve(
                //    _shifts.Values.ToList(),
                //    _workers.Values.ToList(),
                //    _tools.Values.ToList(),
                //    _zones.Values,
                //    _jobs.Values,
                //    strategy, _shiftManager);

                //foreach (var job in results)
                //{
                //    var activity = _activitiesMap[job.Job.ID];
                //    var scheduledActivity = _scheduledJobs[activity.UID];

                //    var start = TimeFrame.FromMinutes(job.Start);
                //    var end = TimeFrame.FromMinutes(job.End);

                //    scheduledActivity.ScheduledStart = start;
                //    scheduledActivity.ScheduledFinish = end;

                //    //result.ActivitySchedule.AddOrUpdateItemSchedule(job.Start, scheduledActivity);
                //    //result.State = SolverResultState.OptimalSolutionFound;
                //}
                //result.State = SolverResultState.OptimalSolutionFound;
            }
            catch (Exception ex)
            {
                throw new Exception("Yikes! Error in solver!", ex);
            }

            return result;
        }