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);
        }
Пример #2
0
        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
            };
        }
Пример #3
0
        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);
        }
Пример #4
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++;
            }
        }