private double generar_tiempo_de_falla(int edad_camion) { //Genera un tiempo de falla valido... Si el camion es usado, encuentra cual es su fecha de falla //La falla depende de la edad del camión, del tipo de camión, de la faena y del componente en si. //Toda esa información es rescatable dado que el componente sabe en que camión está. //El componente tiene un arreglo de una dimensión que indica la tasa de falla beta con respecto a la edad del camión //Se tiene la varianza y la media en este punto if (edad_camion > 19) { edad_camion = 19; } double tasa_falla_promedio = 0; for (int i = edad_camion; i < 20; i++) { tasa_falla_promedio += tasas_falla[i + 1]; } tasa_falla_promedio = tasa_falla_promedio / (20 - edad_camion); if (tasa_falla_promedio == 0) { return(c.t_max + 1); } double media_tiempos_anual = 1 / tasa_falla_promedio; double arcsin = RNGen.Arcsin(); double varianza = media_tiempos_anual / tasas_falla[0]; double b = Math.Sqrt(8 * varianza); double a = media_tiempos_anual - b / 2; //a+b/2=media, b^2/8=varianza double instancia_tiempo = this.camion.faena.ponderador * (24 * 365) * (a + b * arcsin); return(instancia_tiempo); }
public override void realizar_cambio() { foreach (Faena f in faenas) { f.vaciar_batch(); } generar_siguiente_tiempo(RNGen.Expo(6) * 24); }
public void reemplazar_componente(Componente defectuoso) { componentes.Remove(defectuoso); double probabilidad = Input.probabilidad_envio[this.faena.Nombre][defectuoso.tipo_componente]; //Con probabilidad P se agrega al batch... if (RNGen.Unif(0, 1) <= probabilidad) { faena.agregar_a_batch(defectuoso); } //Agregar el componente nuevo agregar_componente(new Componente(this.c, this, defectuoso.tipo_componente, Input.tasa_falla_componentes[this.tipo_camion][defectuoso.tipo_componente])); }
public void vaciar_batch() { //int n_componentes = batch.Count; int status; foreach (Componente comp in batch) { if (Input.mortalidad[comp.tipo_componente] <= RNGen.Unif(0, 1)) { status = 0; } else { status = 1; } //Reg.agregar_registro(this.c.T_simulacion,this.Nombre,comp.camion.tipo_camion,comp.tipo_componente,status); } batch = null; batch = new List <Componente>(); //Console.WriteLine ("Se han enviado {0} componentes a KRCC", n_componentes); }
public VaciadoBatch(Controlador c, List <Faena> faenas) { this.c = c; this.faenas = faenas; generar_siguiente_tiempo(RNGen.Expo(6) * 24); }