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