public StaffingResult FillEmp(List <Request> activeRequests, List <Employee> employees) { var result = new StaffingResult(); FillCandidates(activeRequests, employees); int expectedResult = CalExpectedScore(activeRequests); var staffingController = new StaffingController(activeRequests, expectedResult); var selection = staffingController.CreateSelection(); var crossover = staffingController.CreateCrossover(); var mutation = staffingController.CreateMutation(); var fitness = staffingController.CreateFitness(); var population = new Population(100, 200, staffingController.CreateChromosome()); population.GenerationStrategy = new PerformanceGenerationStrategy(); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.MutationProbability = 0; ga.Termination = staffingController.CreateTermination(); ga.GenerationRan += delegate { // force GA stop when hit safe gate if (ga.Population.GenerationsNumber >= GENERATION_SAFE_GATE) { result = ProcessTerminationResult(employees, ga, expectedResult, activeRequests); ga.Stop(); } }; ga.TerminationReached += delegate { result = ProcessTerminationResult(employees, ga, expectedResult, activeRequests); }; try { staffingController.ConfigGA(ga); Task.Run(() => ga.Start()).Wait(WAIT_PROCESSING); //ga.Start(); } catch (Exception ex) { throw; } return(result); }
/// <summary> /// Gets the current staffing level (state) for the user /// </summary> /// <returns>StateResult object with the users current staffing level</returns> public StaffingResult GetCurrentStaffing() { var profile = _userProfileService.GetProfileByUserId(UserId); if (profile == null) { throw HttpStatusCode.Unauthorized.AsException(); } var userState = _userStateService.GetLastUserStateByUserId(UserId); var result = new StaffingResult { Uid = UserId.ToString(), Nme = profile.FullName.AsFirstNameLastName, Typ = userState.State, Tms = userState.Timestamp.TimeConverter(_departmentsService.GetDepartmentById(DepartmentId, false)), Not = userState.Note }; return(result); }
public async Task <ActionResult <StaffingResult> > GetCurrentStaffing() { var profile = await _userProfileService.GetProfileByUserIdAsync(UserId); if (profile == null) { return(Unauthorized()); } var userState = await _userStateService.GetLastUserStateByUserIdAsync(UserId); var result = new StaffingResult { Uid = UserId.ToString(), Nme = profile.FullName.AsFirstNameLastName, Typ = userState.State, Tms = userState.Timestamp.TimeConverter(await _departmentsService.GetDepartmentByIdAsync(DepartmentId, false)), Not = userState.Note }; return(Ok(result)); }