コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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));
        }