private void simulateOneHour() { var sw = new Stopwatch(); sw.Start(); if (ProjectByCreationTimeInHours.TryGetValue(HoursElapsed, out var projects)) { foreach (var project in projects) { var problem = CreatePlanSelectionProblem(project); var plans = problem.SuggestPlans(out _); project.Plans = plans; if (plans.Length > 0) { scheduleWork(plans[0], HoursElapsed, project.Id); } } } if (HoursElapsed > 0 && HoursElapsed % ExecutorsEconomicBehaviour.PaymentRateUpdatingIntervalHours == 0) { updatePaymentRates(HoursElapsed); } sw.Stop(); _log.Debug($"Hour {HoursElapsed} modeled in {sw.ElapsedMilliseconds} ms"); }
public void GenerateProjects(int hours) { var projectByCreationTime = generateProjects( hours, MarketBehaviour.ClockIntervalHours, MarketBehaviour.NewProjectProbability, ProjectFactory); if (ProjectByCreationTimeInHours == null) { ProjectByCreationTimeInHours = projectByCreationTime; } else { foreach (var pair in projectByCreationTime) { if (ProjectByCreationTimeInHours.ContainsKey(pair.Key)) { throw new InvalidOperationException("Different project generation calls overlap in time scale"); } ProjectByCreationTimeInHours[pair.Key] = pair.Value; } } }