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; }