// CALCULO EL MENOR TEMPORARTIO private Temporarios calcularLlegadaCola() { double menor = 999999; Temporarios objeto_menor = new Temporarios(); int contador = 0; int puntero = 0; foreach (var temp in lista_temporarios) { contador++; if (temp.tiempo < menor && !temp.utilizado) { menor = temp.tiempo; objeto_menor = temp; puntero = contador; } } if (puntero != 0) { lista_temporarios[puntero - 1].utilizado = true; } else { lista_temporarios[puntero].utilizado = true; } return(objeto_menor); }
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; } }