private void SetupFinish(SetupControl control, SimulatorParameters arguments) { control.Dispose(); simControl = new SimulatorControl(); simControl.ReturnClick += ReturnSetup; simControl.Setup(arguments); this.Controls.Clear(); this.Controls.Add(simControl); }
private void SetupControl_Load(object sender, EventArgs e) { Dock = DockStyle.Fill; TitleLabel.Text = "Bienvenido al Simulador de Epidemias!"; SubtitleLabel.Text = "Configure los parametros con los cuales realizar sus pruebas, o dejelos vacíos para que se usen los valores por defecto. Luego seleccione la opción" + " de \"Visualizar\" para reproducir la animación de una única iteracion del simulador. " + "\n\nSi desea generar experimentos," + " dirigase a la opción de \"Experimentar\", donde allí podra configurar multiples instancias del simulador para compararlas entre sí. " + "Los resultados de estos son promediados antes de ser agregados a una grilla del parámetro que se quiera medir, en función al número de iteración."; InfectionRatioText.Text = "Factor de Infeccion. Este valor es un escalar que multiplica la función de probabilidad de infeccion. Debe ser un valor positivo menor o igual a 10." + " Por defecto su valor es 4."; RecoveryFactorText.Text = "Factor de Recuperabilidad. Este valor es un escalar que multiplica la función de probabilidad de recuperación. Debe ser un valor positivo menor o igual" + " a 10. Por defecto su valor es 5."; ImmunityDaysText.Text = "Cantidad de días de Inmunidad. Este valor define cuantas iteraciones un nodo pasara en el estado \"Removed\", luego de haber sobrellevado la infección. Durante" + " este tiempo, la probabilidad de que este nodo vuelva a infectarse es 0. Por defecto, su valor es 4."; VaccineEffText.Text = "Eficiencia de Vacunación. Este valor porcentual define cuan significativo es el impacto de las vacunas en la probabilidad de infeccion. Cuan mayor sea este valor" + " más se reduce la probabilidad de contagio."; VaccineRatioText.Text = "Proporción de Vacunados. Este valor porcentual configura cuantos nodos serán elegidos al azar para ser vacunados."; AtRiskRatioText.Text = "Proporcion de Pacientes de Riesgo. Este valor porcentual fija cuantos nodos serán azarosamente señalizados como nodos en riesgo. Estos nodos luego de ser infectados " + "son removidos de la red, ya que no tienen pocibilidad de recuperación."; IterationsLabel.Text = "Cantidad de iteraciónes que durara cada una de las simulaciones realizadas en el experimento."; ExperimentNumberLabel.Text = "Cantidad de experimentos que serán realizados para promediar los resultados."; arguments = new SimulatorParameters() { VaccineEfficiencyRatio = 0.1, AtRiskRatio = 0, VaccinatedRatio = 0, ChiSquaredDistributionDegreesOfFreedom = 7, InfectionChiSquaredFactor = 4 * 7 / 10, RecoveryChiSquaredFactor = 5 * 3 / 10, ChiSquaredRecoveryDistributionDegreesOfFreedom = 7, InfectionProbabilities = new List <double>() { 0.2, 0.2, 0.5, 0.4, 0.35, 0.3, 0.2, 0.2, 0.1, 0.1 }, //RecoveryProbabilities = new List<double>() { 0.05, 0.1, 0.25, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, RecoveryProbabilities = new List <double>() { 0.05, 0.05, 0.1, 0.2, 0.3, 0.45, 0.6, 0.75, 0.9, 1 }, DaysOfImmunity = 4 }; }
static async Task <int> MainAsync(string[] args) { IConfiguration configuration = new ConfigurationBuilder() .AddEnvironmentVariables() .AddCommandLine(args) .Build(); ModuleClient moduleClient = await Init(configuration); TimeSpan messageDelay = configuration.GetValue("MessageDelay", TimeSpan.FromSeconds(5)); var sim = new SimulatorParameters { TempMin = configuration.GetValue <double>("tempMin", 21), TempMax = configuration.GetValue <double>("tempMax", 100), }; await SendEvents(moduleClient, messageDelay, sim).ConfigureAwait(false); return(0); }
static async Task SendEvents(ModuleClient moduleClient, TimeSpan messageDelay, SimulatorParameters sim) { int count = 1; double currentTemp = sim.TempMin; var cts = new CancellationTokenSource(); while (!cts.Token.IsCancellationRequested) { if (currentTemp > sim.TempMax) { currentTemp += Rnd.NextDouble() - 0.5; // add value between [-0.5..0.5] } else { currentTemp += -0.25 + (Rnd.NextDouble() * 1.5); // add value between [-0.25..1.25] - average +0.5 } var tempData = new MessageBody { Temperature = currentTemp, Humidity = Rnd.Next(24, 27), TimeCreated = DateTime.UtcNow }; string dataBuffer = JsonConvert.SerializeObject(tempData); var eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer)); Console.WriteLine($"\t{DateTime.Now.ToLocalTime()}> Sending message: {count}, Body: [{dataBuffer}]"); await moduleClient.SendEventAsync("temperatureOutput", eventMessage).ConfigureAwait(false); await Task.Delay(messageDelay, cts.Token).ConfigureAwait(false); count++; } }