示例#1
0
        private void Button1_Click(object sender, EventArgs e)
        {
            Simular teste = new Simular();


            teste.Caminhar(teste.Preencher());
        }
示例#2
0
文件: Form1.cs 项目: exe0708/SIM4k4
        //CALCULO LA LLEGADA DEL PROXIMO EVENTO MIRANDO EL MENOR TIEMPO
        private void calcularProximoEvento(Simular sim)
        {
            double menor = 999999;

            foreach (var grupo in sim.grupos)
            {
                if (grupo.proximaLlegada < menor && grupo.proximaLlegada > 0)
                {
                    menor             = grupo.proximaLlegada;
                    sim.nombre_evento = grupo.evento.nombre;
                    sim.id_evento     = grupo.evento.id;
                }
            }
            if (sim.limpieza.finLimpieza < menor)
            {
                menor                    = sim.limpieza.finLimpieza;
                sim.nombre_evento        = "FinLimpieza";
                sim.id_evento            = 6;
                sim.limpieza.ordena      = false;
                sim.limpieza.finLimpieza = 9999999;
            }
            sim.reloj = menor;
        }
示例#3
0
文件: Form1.cs 项目: exe0708/SIM4k4
        //SIMULO
        private void btn_simular_Click(object sender, EventArgs e)
        {
            double         minutos = double.Parse(txt_minutos.Text);
            double         cont    = 0;
            int            cont2   = 0;
            bool           band;
            int            desde = -1, hasta = -1, dia, dif = -1, limite = 0;
            Random         random   = new Random();
            List <Simular> lista    = new List <Simular>();
            Simular        anterior = new Simular();

            do
            {
                Simular sim = new Simular();
                sim = anterior;
                if (cont == 0)
                {
                    sim.reloj                = 0;
                    sim.limpieza             = new Limpieza();
                    sim.grupos               = new List <Grupo>();
                    sim.cola                 = new int[3];
                    sim.limpieza.ordena      = false;
                    sim.limpieza.finLimpieza = 9999999;
                    sim.cancha1              = 1;
                    sim.cancha2              = 1;
                    for (int j = 0; j < 6; j++)
                    {
                        Grupo grupo = new Grupo();
                        grupo.random_1 = random.NextDouble();
                        grupo.random_2 = random.NextDouble();
                        calcularTiempos(grupo, j, null, true);
                        grupo.proximaLlegada = grupo.timpoEntreLlegada + sim.reloj;
                        sim.grupos.Add(grupo);
                        if (j < 3)
                        {
                            sim.cola[j] = 0;
                        }
                    }

                    calcularProximoEvento(sim);
                    calcularTiempos(sim.grupos[sim.id_evento], sim.id_evento, sim, false);
                    sim.grupos[sim.id_evento].proximaLlegada = sim.grupos[sim.id_evento].timpoEntreLlegada + sim.reloj;
                    cont = sim.reloj;
                    lista.Add(sim);
                }
                else
                {
                    calcularProximoEvento(sim);
                    if (sim.id_evento != 6)
                    {
                        calcularTiempos(sim.grupos[sim.id_evento], sim.id_evento, sim, false);
                        sim.grupos[sim.id_evento].proximaLlegada = sim.grupos[sim.id_evento].timpoEntreLlegada + sim.reloj;
                    }
                    else
                    {
                        calcularTiempos(null, sim.id_evento, sim, false);
                    }
                    cont = sim.reloj;
                }
                Simular insertar = new Simular();
                insertar.cancha1       = sim.cancha1;
                insertar.cancha2       = sim.cancha2;
                insertar.id_evento     = sim.id_evento;
                insertar.nombre_evento = sim.nombre_evento;
                insertar.reloj         = sim.reloj;
                insertar.cola          = sim.cola;
                insertar.grupos        = sim.grupos;
                insertar.limpieza      = sim.limpieza;
                insertar.colaFutbol    = sim.cola[0];
                insertar.colaBasquet   = sim.cola[1];
                insertar.colaHandball  = sim.cola[2];

                lista.Insert(cont2, insertar);
                cont++;
                anterior = sim;

                band = cont >= minutos;
            } while (!band);
            armarGrilla(lista);
        }
示例#4
0
文件: Form1.cs 项目: exe0708/SIM4k4
        private void calcularTiempos(Grupo grupo, int j, Simular sim, bool band)
        {
            Random random = new Random();

            // GENERO TEMPORARIO
            if (!band)
            {
                Temporarios temp = new Temporarios();
                if (sim.cola[0] == 0 || sim.cola[1] == 0 || sim.cola[2] == 0 && sim.cancha1 == 1 || sim.cancha2 == 1)
                {
                    if (sim.id_evento == 1)
                    {
                        if (sim.limpieza.ordena)
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Limpieza";
                            temp.tiempo_espera = 10.0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = false;
                        }
                        else
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Jugando";
                            temp.tiempo_espera = 0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = true;
                        }
                    }
                    else if (sim.cancha1 == 1 && sim.cancha2 == 1 && sim.id_evento == 2 || sim.id_evento == 0)
                    {
                        if (sim.limpieza.ordena)
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Limpieza";
                            temp.tiempo_espera = 10.0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = false;
                        }
                        else
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Jugando";
                            temp.tiempo_espera = 0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = true;
                        }
                    }
                }
                else
                {
                    if (sim.limpieza.ordena)
                    {
                        temp.id_estado     = sim.id_evento;
                        temp.nombre        = "Limpieza";
                        temp.tiempo_espera = 10;
                        temp.tiempo        = sim.reloj;
                        temp.utilizado     = false;
                    }
                    else
                    {
                        temp.id_estado     = sim.id_evento;
                        temp.nombre        = "Espera";
                        temp.tiempo_espera = 0;
                        temp.tiempo        = sim.reloj;
                        temp.utilizado     = false;
                    }
                }
                if (sim.id_evento <= 2)
                {
                    lista_temporarios.Add(temp);
                }
            }
            switch (j)
            {
            //FUTBOL LLEGADA
            case 0:
                grupo.timpoEntreLlegada = -600 * Math.Log(1 - grupo.random_1);
                grupo.random_1          = random.NextDouble();
                grupo.evento            = new Eventos();
                grupo.evento.id         = 0;
                grupo.evento.nombre     = "LlegadaFutbol";
                //FUTBOL FIN CUANDO LLEGA
                if (sim != null)
                {
                    sim.grupos[j].timpoEntreLlegada = -600 * Math.Log(1 - grupo.random_1);
                    sim.grupos[j].random_1          = random.NextDouble();
                    sim.grupos[j].evento            = new Eventos();
                    sim.grupos[j].evento.id         = 0;
                    sim.grupos[j].evento.nombre     = "LlegadaFutbol";
                    //SI PUEDE JUGAR
                    if (sim.cancha1 == 1 && sim.cancha2 == 1 && sim.cola[0] == 0)
                    {
                        //CUANDO UTILIZA UN RND NUEVO
                        if (sim.grupos[3].generoRandom == 2)
                        {
                            sim.grupos[3].random_1     = random.NextDouble();
                            sim.grupos[3].random_2     = random.NextDouble();
                            sim.grupos[3].generoRandom = 0;
                        }
                        //CUANDO UTILIZA EL 2 RANDOM
                        if (!sim.grupos[3].utilizaRandom)
                        {
                            sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                            sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                            sim.grupos[3].utilizaRandom     = true;
                            grupo.generoRandom++;
                        }
                        else
                        {
                            sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                            sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                            sim.grupos[3].utilizaRandom     = false;
                            grupo.generoRandom++;
                        }
                        sim.cancha1 = 2;
                        sim.cancha2 = 2;
                    }
                    //SUMO COLA
                    else
                    {
                        sim.cola[0]++;
                    }
                }
                break;

            //BASQUET LLEGADA
            case 1:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 1;
                grupo.evento.nombre = "LlegadaBasket";
                //CUANDO UTILIZA UN RND NUEVO
                if (grupo.generoRandom == 2)
                {
                    grupo.random_1     = random.NextDouble();
                    grupo.random_2     = random.NextDouble();
                    grupo.generoRandom = 0;
                }
                //CUANDO UTILIZA EL 2 RANDOM
                if (!grupo.utilizaRandom)
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Cos(2 * Math.PI * grupo.random_2) * 120) + 480;
                    grupo.utilizaRandom     = true;
                    grupo.generoRandom++;
                }
                else
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Sin(2 * Math.PI * grupo.random_2) * 120) + 480;
                    grupo.utilizaRandom     = false;
                    grupo.generoRandom++;
                }
                //FUTBOL FIN CUANDO LLEGA
                if (sim != null)
                {
                    sim.grupos[j].evento        = new Eventos();
                    sim.grupos[j].evento.id     = 1;
                    sim.grupos[j].evento.nombre = "LlegadaBasket";
                    //CUANDO UTILIZA UN RND NUEVO
                    if (sim.grupos[j].generoRandom == 2)
                    {
                        sim.grupos[j].random_1     = random.NextDouble();
                        sim.grupos[j].random_2     = random.NextDouble();
                        sim.grupos[j].generoRandom = 0;
                    }
                    //CUANDO UTILIZA EL 2 RANDOM
                    if (!sim.grupos[j].utilizaRandom)
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[j].random_2) * 120) + 480;
                        sim.grupos[j].utilizaRandom     = true;
                        sim.grupos[j].generoRandom++;
                    }
                    else
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[j].random_2) * 120) + 480;
                        sim.grupos[j].utilizaRandom     = false;
                        sim.grupos[j].generoRandom++;
                    }
                    //SI PUEDE JUGAR
                    if (sim.cancha1 == 1 || sim.cancha2 == 1 && sim.cola[0] == 0 && sim.cola[2] == 0)
                    {
                        sim.grupos[4].timpoEntreLlegada = 70 + (sim.grupos[4].random_1 * (130 - 70));
                        sim.grupos[4].random_1          = random.NextDouble();
                        sim.grupos[4].proximaLlegada    = sim.grupos[4].timpoEntreLlegada + sim.reloj;

                        if (sim.cancha1 == 1 && sim.cancha2 == 1)
                        {
                            sim.cancha1 = 2;
                            sim.cancha2 = 1;
                        }
                        else if (sim.cancha1 == 1 && sim.cancha2 == 2)
                        {
                            sim.cancha1 = 2;
                        }
                        else if (sim.cancha1 == 2 && sim.cancha2 == 1)
                        {
                            sim.cancha2 = 2;
                        }
                    }
                    //SUMO COLA
                    else
                    {
                        sim.cola[1]++;
                    }
                }
                break;

            //HANDBALL LLEGADA
            case 2:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 2;
                grupo.evento.nombre = "LlegadaHandBall";
                //CUANDO UTILIZA UN RND NUEVO
                if (grupo.generoRandom == 2)
                {
                    grupo.random_1     = random.NextDouble();
                    grupo.random_2     = random.NextDouble();
                    grupo.generoRandom = 0;
                }
                //CUANDO UTILIZA EL 2 RANDOM
                if (!grupo.utilizaRandom)
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Cos(2 * Math.PI * grupo.random_2) * 120) + 720;
                    grupo.utilizaRandom     = true;
                    grupo.generoRandom++;
                }
                else
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Sin(2 * Math.PI * grupo.random_2) * 120) + 720;
                    grupo.utilizaRandom     = false;
                    grupo.generoRandom++;
                }

                //HANDBALL FIN CUANDO LLEGA
                if (sim != null)
                {
                    sim.grupos[j].evento        = new Eventos();
                    sim.grupos[j].evento.id     = 2;
                    sim.grupos[j].evento.nombre = "LlegadaHandBall";
                    //CUANDO UTILIZA UN RND NUEVO
                    if (sim.grupos[j].generoRandom == 2)
                    {
                        sim.grupos[j].random_1     = random.NextDouble();
                        sim.grupos[j].random_2     = random.NextDouble();
                        sim.grupos[j].generoRandom = 0;
                    }
                    //CUANDO UTILIZA EL 2 RANDOM
                    if (!sim.grupos[j].utilizaRandom)
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[j].random_2) * 120) + 720;
                        sim.grupos[j].utilizaRandom     = true;
                        sim.grupos[j].generoRandom++;
                    }
                    else
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[j].random_2) * 120) + 720;
                        sim.grupos[j].utilizaRandom     = false;
                        sim.grupos[j].generoRandom++;
                    }
                    //SI PUEDE JUGAR
                    if (sim.cancha1 == 1 && sim.cancha2 == 1 && sim.cola[2] == 0)
                    {
                        //CUANDO UTILIZA UN RND NUEVO
                        if (sim.grupos[5].generoRandom == 2)
                        {
                            sim.grupos[5].random_1     = random.NextDouble();
                            sim.grupos[5].random_2     = random.NextDouble();
                            sim.grupos[5].generoRandom = 0;
                        }
                        //CUANDO UTILIZA EL 2 RANDOM
                        if (!sim.grupos[5].utilizaRandom)
                        {
                            sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[5].random_2) * 20) + 80;
                            sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                            sim.grupos[5].utilizaRandom     = true;
                            grupo.generoRandom++;
                        }
                        else
                        {
                            sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 20) + 80;
                            sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                            sim.grupos[5].utilizaRandom     = false;
                            grupo.generoRandom++;
                        }
                        sim.cancha1 = 2;
                        sim.cancha2 = 2;
                    }
                    //SUMO COLA
                    else
                    {
                        sim.cola[2]++;
                    }
                }
                break;

            //FIN FUTBOL
            case 3:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 3;
                grupo.evento.nombre = "FinFutbol";
                if (sim != null)
                {
                    sim.limpieza                   = new Limpieza();
                    sim.limpieza.ordena            = true;
                    sim.limpieza.acondicionamiento = 10.0;
                    sim.limpieza.finLimpieza       = sim.reloj + sim.limpieza.acondicionamiento;
                    sim.cancha1 = 3;
                    sim.cancha2 = 3;
                    sim.grupos[3].proximaLlegada = 9999999;
                }
                break;

            //FIN BASQUET
            case 4:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 4;
                grupo.evento.nombre = "FinBasquet";
                if (sim != null)
                {
                    sim.limpieza                   = new Limpieza();
                    sim.limpieza.ordena            = true;
                    sim.limpieza.acondicionamiento = 10.0;
                    sim.limpieza.finLimpieza       = sim.reloj + sim.limpieza.acondicionamiento;
                    sim.cancha1 = 3;
                    sim.cancha2 = 3;
                    sim.grupos[4].proximaLlegada = 9999999;
                }
                break;

            //FIN HANDBALL
            case 5:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 5;
                grupo.evento.nombre = "FinHandball";
                if (sim != null)
                {
                    sim.limpieza                   = new Limpieza();
                    sim.limpieza.ordena            = true;
                    sim.limpieza.acondicionamiento = 10.0;
                    sim.limpieza.finLimpieza       = sim.reloj + sim.limpieza.acondicionamiento;
                    sim.cancha1 = 3;
                    sim.cancha2 = 3;
                    sim.grupos[5].proximaLlegada = 9999999;
                }
                break;

            //LIMPIEZA
            case 6:
                sim.cancha1 = 1;
                sim.cancha2 = 1;
                sim.grupos[3].proximaLlegada = 999999;
                sim.grupos[4].proximaLlegada = 999999;
                sim.grupos[5].proximaLlegada = 999999;
                if (sim != null)
                {
                    var temporario = calcularLlegadaCola();
                    if (temporario.nombre != "")
                    {
                        if (sim.cola[0] > 0 && temporario.id_estado == 0)
                        {
                            if (sim.grupos[3].generoRandom == 2)
                            {
                                sim.grupos[3].random_1     = random.NextDouble();
                                sim.grupos[3].random_2     = random.NextDouble();
                                sim.grupos[3].generoRandom = 0;
                            }
                            //CUANDO UTILIZA EL 2 RANDOM
                            if (!sim.grupos[3].utilizaRandom)
                            {
                                sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                                sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                                sim.grupos[3].utilizaRandom     = true;
                                sim.grupos[3].generoRandom++;
                            }
                            else
                            {
                                sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                                sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                                sim.grupos[3].utilizaRandom     = false;
                                sim.grupos[3].generoRandom++;
                            }
                            sim.cancha1 = 2;
                            sim.cancha2 = 2;
                            sim.cola[0]--;
                        }
                        else if (sim.cola[2] > 0 && temporario.id_estado == 2)
                        {
                            if (sim.grupos[5].generoRandom == 2)
                            {
                                sim.grupos[5].random_1     = random.NextDouble();
                                sim.grupos[5].random_2     = random.NextDouble();
                                sim.grupos[5].generoRandom = 0;
                            }
                            //CUANDO UTILIZA EL 2 RANDOM
                            if (!sim.grupos[5].utilizaRandom)
                            {
                                sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[5].random_2) * 20) + 80;
                                sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                                sim.grupos[5].utilizaRandom     = true;
                                sim.grupos[5].generoRandom++;
                            }
                            else
                            {
                                sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 20) + 80;
                                sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                                sim.grupos[5].utilizaRandom     = false;
                                sim.grupos[5].generoRandom++;
                            }
                            sim.cancha1 = 2;
                            sim.cancha2 = 2;
                            sim.cola[2]--;
                        }
                        else if (sim.cola[1] > 0 && temporario.id_estado == 1)
                        {
                            sim.grupos[4].timpoEntreLlegada = 70 + (sim.grupos[4].random_1 * (130 - 70));
                            sim.grupos[4].random_1          = random.NextDouble();
                            sim.grupos[4].proximaLlegada    = sim.grupos[4].timpoEntreLlegada + sim.reloj;

                            if (sim.cancha1 == 1 && sim.cancha2 == 1)
                            {
                                sim.cancha1 = 2;
                                sim.cancha2 = 1;
                            }
                            else if (sim.cancha1 == 1 && sim.cancha2 == 2)
                            {
                                sim.cancha1 = 2;
                            }
                            else if (sim.cancha1 == 2 && sim.cancha2 == 1)
                            {
                                sim.cancha2 = 2;
                            }
                            sim.cola[1]--;
                        }
                    }
                }

                break;
            }
        }