Ejemplo n.º 1
0
        public int[][] Agent_Restore(int[][] World_Data, Agente wobot, double Lambda_Exp)
        {
            Random       Uniform_Distribution = new Random();
            Distribution Builder = new Distribution();

            World_Data[wobot.Ypos][wobot.Xpos] = 0;// LÍNEA IMPORTANTÍSIMA
            int Xcord, Ycord, orientation = 0;

            Xcord       = Uniform_Distribution.Next(40); //El 21 y el 40 son los índices de la matrix del mundo.
            Ycord       = Uniform_Distribution.Next(21);
            orientation = Uniform_Distribution.Next(4);
            while (World_Data[Ycord][Xcord] != 0)
            {
                Xcord       = Uniform_Distribution.Next(40);
                Ycord       = Uniform_Distribution.Next(21);
                orientation = Uniform_Distribution.Next(4);
            }
            wobot.Old_Xpos = 0;
            wobot.Old_Ypos = 0;
            wobot.prev_signal_intensity = 0;
            wobot.Xpos        = Xcord;
            wobot.Ypos        = Ycord;
            wobot.orientation = orientation;
            wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos);
            wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos);
            wobot.Time_of_reaction = Builder.nextExponential(Lambda_Exp);
            switch (orientation)
            {
            case (0):
                World_Data[Ycord][Xcord] = 4;
                break;

            case (1):
                World_Data[Ycord][Xcord] = 5;
                break;

            case (2):
                World_Data[Ycord][Xcord] = 6;
                break;

            case (3):
                World_Data[Ycord][Xcord] = 7;
                break;
            }
            wobot.Clock_sense   = false;
            wobot.Clock_inverse = false;
            return(World_Data);
        }
Ejemplo n.º 2
0
        public int[][] Build_Wobots(int[][] World_Data, int Cant, int cobertura)
        {
            Agent_list = new Agente[Cant];                    //Leyenda (orientation):
            int          orientation          = 0;
            Random       Uniform_Distribution = new Random(); //0- A_Arriba.
            Distribution Builder = new Distribution();        //1- A_Abajo.
            int          Xcord, Ycord = 0;                    //2- A_Izquierda.

            for (int i = 1; i <= Cant; i++)                   //3- A_Derecha.
            {
                Xcord = Uniform_Distribution.Next(40);        //El 23 y el 43 son los índices de la matrix del mundo.
                Ycord = Uniform_Distribution.Next(21);
                while (World_Data[Ycord][Xcord] != 0)
                {
                    Xcord       = Uniform_Distribution.Next(40);
                    Ycord       = Uniform_Distribution.Next(21);
                    orientation = Uniform_Distribution.Next(4);
                }
                Agent_list[i - 1] = new Agente(Xcord, Ycord, i, cobertura, orientation);
                switch (orientation)
                {
                case (0):
                    World_Data[Ycord][Xcord] = 4;
                    break;

                case (1):
                    World_Data[Ycord][Xcord] = 5;
                    break;

                case (2):
                    World_Data[Ycord][Xcord] = 6;
                    break;

                case (3):
                    World_Data[Ycord][Xcord] = 7;
                    break;
                }
            }
            return(World_Data);
        }
Ejemplo n.º 3
0
        public int[][] turn_down(int[][] World_Data, Agente wobot, double Lambda_Exp)
        {
            Distribution dist = new Distribution();

            //wobot.orientation = 2;
            World_Data[wobot.Ypos][wobot.Xpos] = 5;
            wobot.Time_of_reaction             = dist.nextExponential(Lambda_Exp);
            switch (wobot.orientation)
            {
            case (2):    //Agente orientado hacia la izquierda
                wobot.Clock_sense   = true;
                wobot.Clock_inverse = false;
                wobot.orientation   = 1;
                break;

            case (3):    //Agente orientado hacia la derecha
                wobot.Clock_sense   = false;
                wobot.Clock_inverse = true;
                wobot.orientation   = 1;
                break;
            }
            return(World_Data);
        }
Ejemplo n.º 4
0
        public int[][] turn_rigth(int[][] World_Data, Agente wobot, double Lambda_Exp)
        {
            Distribution dist = new Distribution();

            //wobot.orientation = 3;
            World_Data[wobot.Ypos][wobot.Xpos] = 7;
            wobot.Time_of_reaction             = dist.nextExponential(Lambda_Exp);
            switch (wobot.orientation)
            {
            case (0):    //Agente orientado hacia arriba
                wobot.Clock_sense   = true;
                wobot.Clock_inverse = false;
                wobot.orientation   = 3;
                break;

            case (1):    //Agente orientado hacia abajo
                wobot.Clock_sense   = false;
                wobot.Clock_inverse = true;
                wobot.orientation   = 3;
                break;
            }
            return(World_Data);
        }
Ejemplo n.º 5
0
        public int[][] move_down(int[][] World_Data, Evento[] Event_List, Agente wobot, bool push_trast, double Lambda_Exp, double Lambda_Huecos)
        {
            Distribution dist = new Distribution();
            Random       Uniform_Distribution = new Random();
            int          Hole_X_Pos, Hole_Y_Pos = 0;

            if (push_trast == true)
            {
                if (World_Data[wobot.Ypos + 2][wobot.Xpos] == 0)//Mover el traste a casilla vacía.
                {
                    World_Data[wobot.Ypos][wobot.Xpos]     = 0;
                    World_Data[wobot.Ypos + 1][wobot.Xpos] = 9;
                    World_Data[wobot.Ypos + 2][wobot.Xpos] = 1;
                    //wobot.prev_signal_intensity = wobot.signal_intensity;
                    wobot.Old_Xpos = wobot.Xpos;
                    wobot.Old_Ypos = wobot.Ypos;
                    wobot.Ypos    += 1; // wobot.Ypos = wobot.Ypos - 1;
                    wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos);
                    wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos);
                    wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp);
                }
                else
                {
                    if (World_Data[wobot.Ypos + 2][wobot.Xpos] == 2)//Mover el traste al hueco.
                    {
                        World_Data[wobot.Ypos][wobot.Xpos]     = 0;
                        World_Data[wobot.Ypos + 1][wobot.Xpos] = 4;
                        //World_Data[wobot.Ypos + 2][wobot.Xpos] = 0;
                        //Tratamiento de huecos
                        Hole_X_Pos = Uniform_Distribution.Next(41);
                        Hole_Y_Pos = Uniform_Distribution.Next(22);
                        while (World_Data[Hole_Y_Pos][Hole_X_Pos] != 0)
                        {
                            Hole_X_Pos = Uniform_Distribution.Next(41);
                            Hole_Y_Pos = Uniform_Distribution.Next(22);
                        }
                        //Aquí asigno el entero 20 para luego localizarlo en el form y poder pintar el hueco.
                        World_Data[Hole_Y_Pos][Hole_X_Pos] = 20;
                        //Actualizar las coordenadas del objeto hueco de Event_List.
                        Hole_Restore(World_Data, Event_List, wobot.Xpos, wobot.Ypos + 2, Lambda_Huecos);
                        World_Data[wobot.Ypos + 2][wobot.Xpos] = 0;
                        ///////////////////////////////////////////////
                        wobot.Old_Xpos = wobot.Xpos;
                        wobot.Old_Ypos = wobot.Ypos;
                        wobot.Ypos    += 1; // wobot.Ypos = wobot.Ypos - 1;
                        wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos);
                        wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos);
                        wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp);
                    }
                }
            }
            else //Mover el agente a la próxima casilla vacía de abajo.
            {
                //if (World_Data[wobot.Ypos + 1][wobot.Xpos] != 0) return World_Data;
                World_Data[wobot.Ypos][wobot.Xpos]     = 0;
                World_Data[wobot.Ypos + 1][wobot.Xpos] = 4;
                wobot.Old_Xpos = wobot.Xpos;
                wobot.Old_Ypos = wobot.Ypos;
                wobot.Ypos    += 1;
                wobot.get_neighborhood(World_Data, wobot.Xpos, wobot.Ypos);
                wobot.get_signal_intensity(wobot.cobertura, World_Data, wobot.Xpos, wobot.Ypos);
                wobot.Time_of_reaction = dist.nextExponential(Lambda_Exp);
            }
            wobot.Clock_sense   = false;
            wobot.Clock_inverse = false;
            return(World_Data);
        }