Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public override void realizar_cambio()
 {
     foreach (Faena f in faenas)
     {
         f.vaciar_batch();
     }
     generar_siguiente_tiempo(RNGen.Expo(6) * 24);
 }
Exemplo n.º 3
0
        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]));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 public VaciadoBatch(Controlador c, List <Faena> faenas)
 {
     this.c      = c;
     this.faenas = faenas;
     generar_siguiente_tiempo(RNGen.Expo(6) * 24);
 }