private void Button1_Click(object sender, EventArgs e) { Simular teste = new Simular(); teste.Caminhar(teste.Preencher()); }
//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; }
//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); }
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; } }