Exemple #1
0
        public int Run()
        {
            if (Helper.DiffersFromThreshold(1, GenerateEmployeeType, GenerateTicketsPerDayDistribution, GenerateWorkshifts, BoundaryConditions))
            {
                Print("You may only select one generator function!");
                return(1);
            }
            if (GenerateEmployeeType)
            {
                var etcm = ExampleGenerator.GetEmployeeTypeContentManager();
                etcm.Save(Filename);

                Print("Saved example employee types to " + Filename);
            }
            if (GenerateTicketsPerDayDistribution)
            {
                var gentic = new TicketsPerDayDistributionGenerator();
                gentic.Save(Filename);
                Print("Saved tickets per day distribution " + Filename);
            }
            if (GenerateWorkshifts)
            {
                var ws = ExampleGenerator.GetWorkshifts();
                ws.Save(Filename);
                Print("Saved workshifts example files to " + Filename);
            }
            if (BoundaryConditions)
            {
                var json = JsonConvert.SerializeObject(new BoundaryConditions(), Formatting.Indented);
                File.WriteAllText(Filename, json);
            }

            return(0);
        }
Exemple #2
0
        public int Run()
        {
            init();

            var distributioGenerator = new TicketsPerDayDistributionGenerator();

            distributioGenerator.Load(TicketsPerDayDistributionFileName);

            var g = new Normal(NumOfTickets, NumOfTickets / 100);

            var ticketsPerNDay = new TicketsPerNDays();

            for (int day = 0; day < DaysToGenerate; day++)
            {
                int ticketsForThatDay = (int)g.Sample();
                for (int h = 0; h < TicketsPerDayDistributionGenerator.HOURS_PER_DAY; h++)
                {
                    var hourDist       = Decimal.ToDouble(distributioGenerator.Get(h)) / 100;
                    var gHourDist      = new Normal(hourDist, hourDist >= 1 ? 0.1 : hourDist / 100);
                    var ticketsForHour = gHourDist.Sample() * ticketsForThatDay;
                    ticketsPerNDay.Set(day, h, (int)ticketsForHour);
                }
            }

            ticketsPerNDay.Save(FilenameTicketDistribution);

            Print("Generated Tickets per n day file");

            int ticketNumber = 0;
            int ticks        = 0;

            var gSupportLevel = new Normal(BoundaryConditions.LevelDistributionFactor, 1);

            TicketGenerationPlan tge = new TicketGenerationPlan();

            for (int day = 0; day < DaysToGenerate; day++)
            {
                for (int h = 0; h < TicketsPerDayDistributionGenerator.HOURS_PER_DAY; h++)
                {
                    var ticketsToSolve = ticketsPerNDay.Get(day, h);
                    for (int t = 0; t < ticketsToSolve; t++)
                    {
                        var time         = ticks + ((double)t / (double)ticketsToSolve) * (double)60;
                        var supportLevel = SupportLevel.Level1st;
                        if (gSupportLevel.Sample() >= 2)
                        {
                            supportLevel = SupportLevel.Level2nd;
                        }
                        var ticket = new TicketEntity(ticketNumber, supportLevel, GetLevelDifficulties(), (int)time);
                        tge.Tickets.Add(ticket);
                        ticketNumber++;
                    }
                    ticks += 60;
                }
            }

            var avg1StLevel          = tge.Tickets.Average(i => i.DifficultyToSolveDurationMin[SupportLevel.Level1st]);
            var avg2ndLevel          = tge.Tickets.Average(i => i.DifficultyToSolveDurationMin[SupportLevel.Level2nd]);
            var numOf1stLevel        = tge.Tickets.Count(i => i.Difficulty == SupportLevel.Level1st);
            var numOf2ndLevel        = tge.Tickets.Count(i => i.Difficulty == SupportLevel.Level2nd);
            var percentageOf1stLevel = (double)numOf1stLevel / (double)(numOf1stLevel + numOf2ndLevel) * 100;

            Console.WriteLine("Avg 1st: {0:0.00} ticks 2nd: {1:0.00} ticks Tickets: 1st: {2:0.00} ({3:0.00}%) 2nd: {4:0.00}",
                              avg1StLevel,
                              avg2ndLevel,
                              numOf1stLevel,
                              percentageOf1stLevel,
                              numOf2ndLevel);

            tge.Save(FilenameTicketGeneration);

            return(0);
        }