Esempio n. 1
0
        public static ArbolDecision <object> ArmarArbol(Clasificador clasificador)
        {
            if (clasificador != null)
            {
                ArbolDecision <object> arbolBinario = new ArbolDecision <object>();
                arbolBinario.MapArbol(clasificador);

                return(arbolBinario);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 2
0
        public static Clasificador ArmarClasificador(ConjuntoDeDatos datos)
        {
            if (datos == null || datos.Filas.Count == 0)
            {
                Console.WriteLine("El archivo CSV seleccionado está corrupto o vacío.");
                PressKey();
                return(null);
            }
            else
            {
                Clasificador clasificador = new Clasificador(datos);

                return(clasificador);
            }
        }
Esempio n. 3
0
        public static void SelectCaracteristicas(ConjuntoDeDatos conjuntoDeDatos, Clasificador clasificador, ArbolDecision <object> arbol)
        {
            if (arbol == null)
            {
                Console.WriteLine("Aún no se ha construido un árbol o el CSV seleccionado está vacio.");
            }
            else
            {
                //todo corregir nombres de variables
                List <Pregunta> caracteristicas = new List <Pregunta>();

                Console.WriteLine("\nSeleccione caracteristicas:");
                for (int i = 0; i < clasificador.Encabezados.Count - 1; i++)
                {
                    Console.Write("{0}: ", clasificador.Encabezados[i]);
                    string resp = Console.ReadLine();
                    caracteristicas.Add(new Pregunta(i, resp, clasificador.Encabezados[i]));
                }

                List <string> recorridoPreguntasRespuestas = new List <string>();
                bool          respuestaCarac = false;
                bool          finArbol       = false;

                while (!finArbol)
                {
                    if (!arbol.EsHoja())
                    {
                        Pregunta pregunta = (Pregunta)arbol.Dato;
                        recorridoPreguntasRespuestas.Add(pregunta.ToString());


                        for (int j = 0; j < caracteristicas.Count; j++)
                        {
                            if (pregunta.ToString().Contains(" Mayor o igual a ") && caracteristicas[j].ToString().Contains(" Mayor o igual a ") && pregunta.Columna == caracteristicas[j].Columna)
                            {
                                if (Convert.ToDouble(caracteristicas[j].Valor) >= Convert.ToDouble(pregunta.Valor) && pregunta.Columna == caracteristicas[j].Columna)
                                {
                                    respuestaCarac = true;
                                    recorridoPreguntasRespuestas.Add("Si");
                                    break;
                                }
                                else
                                {
                                    respuestaCarac = false;
                                    recorridoPreguntasRespuestas.Add("No");
                                    break;
                                }
                            }
                            else
                            {
                                if (pregunta.Valor == caracteristicas[j].Valor && pregunta.Columna == caracteristicas[j].Columna)
                                {
                                    respuestaCarac = true;
                                    recorridoPreguntasRespuestas.Add("Si");
                                    break;
                                }
                                else if (pregunta.Valor != caracteristicas[j].Valor && pregunta.Columna == caracteristicas[j].Columna)
                                {
                                    respuestaCarac = false;
                                    recorridoPreguntasRespuestas.Add("No");
                                    break;
                                }
                            }
                        }

                        switch (respuestaCarac)
                        {
                        case true:
                            arbol = JugarRespuesta("si", arbol);
                            break;

                        case false:
                            arbol = JugarRespuesta("no", arbol);
                            break;
                        }
                    }
                    else
                    {
                        finArbol = true;
                        Dictionary <string, int> etiquetas = (Dictionary <string, int>)arbol.Dato;

                        Console.WriteLine("\nPreguntas y respuestas hechas en base a las caracteristicas brindadas:");
                        foreach (string item in recorridoPreguntasRespuestas)
                        {
                            Console.WriteLine(item);
                        }
                        Console.WriteLine("\nDatos Encontrados:");
                        foreach (var hoja in etiquetas)
                        {
                            Console.WriteLine(hoja.Key);
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            Titulo();
            ArbolDecision <object> arbol           = null;
            Clasificador           clasificador    = null;
            ConjuntoDeDatos        conjuntoDeDatos = null;
            int opcion = 0;

            do
            {
                Console.WriteLine(opciones);
                Console.Write("Seleccione opción: ");
                opcion = SafeParseOpcion(Console.ReadLine());
                while (opcion > 4)
                {
                    Console.WriteLine("\nOpción no valida.");
                    PressKey();
                    Console.WriteLine(opciones);
                    Console.Write("Seleccione opción: ");
                    opcion = SafeParseOpcion(Console.ReadLine());
                }
                switch (opcion)
                {
                //MÓDULO: ADMINISTRACIÓN
                case 1:
                    int opcionMenu;
                    do
                    {
                        Console.Clear();
                        Titulo();
                        Console.WriteLine(menuAdmin);
                        Console.Write("Seleccione opción: ");
                        opcionMenu = SafeParseOpcion(Console.ReadLine());
                        while (opcionMenu > 3)
                        {
                            Console.WriteLine("\nOpción no valida.");
                            PressKey();
                            Console.WriteLine(menuAdmin);
                            Console.Write("Seleccione opción: ");
                            opcionMenu = SafeParseOpcion(Console.ReadLine());
                        }
                        switch (opcionMenu)
                        {
                        case 1:
                            conjuntoDeDatos = ArmarConjuntoDeDatos(args);
                            clasificador    = ArmarClasificador(conjuntoDeDatos);


                            if (clasificador != null)
                            {
                                arbol = ArmarArbol(clasificador);
                            }
                            if (arbol != null)
                            {
                                Console.WriteLine("\n¡Él Árbol se ha generado correctamente!");
                                PressKey();
                            }
                            break;

                        case 2:
                            Probar(arbol);
                            PressKey();
                            break;

                        case 3:
                            Console.Clear();
                            Titulo();
                            break;
                        }
                    }while (opcionMenu != 3);
                    break;

                //MÓDULO: CONSULTA
                case 2:
                    int opcionMenuConsulta;
                    do
                    {
                        Console.Clear();
                        Titulo();
                        Console.WriteLine(menuConsulta);
                        Console.Write("Seleccione opción: ");
                        opcionMenuConsulta = SafeParseOpcion(Console.ReadLine());
                        while (opcionMenuConsulta > 4)
                        {
                            Console.WriteLine("\nOpción no valida.");
                            PressKey();
                            Console.WriteLine(menuConsulta);
                            Console.Write("Seleccione opción: ");
                            opcionMenuConsulta = SafeParseOpcion(Console.ReadLine());
                        }
                        switch (opcionMenuConsulta)
                        {
                        case 1:
                            ImprimirArbol(arbol);
                            PressKey();
                            break;

                        case 2:
                            SelectCaracteristicas(conjuntoDeDatos, clasificador, arbol);
                            PressKey();
                            break;

                        case 3:
                            ImprimirProfundidadArbol(arbol);
                            PressKey();
                            break;

                        case 4:
                            Console.Clear();
                            Titulo();
                            break;
                        }
                    } while (opcionMenuConsulta != 4);
                    break;

                case 3:
                    Jugar(arbol);
                    PressKey();
                    break;
                }
            } while (opcion < 4);

            Timer(3000);
        }
Esempio n. 5
0
        public ArbolDecision <T> MapArbol(Clasificador clasificador)
        {
            bool datosEnd = false;

            while (!datosEnd)
            {
                if (Dato == null)
                {
                    Dato = clasificador.obtenerPregunta();
                }

                //invierto los datos del clasificador para que en el árbol las respuestas positivas vayan a la derecha.
                Clasificador hijoDer = new Clasificador(clasificador.obtenerDatosIzquierdo());
                //Si es hoja, almaceno las etiquetas
                if (hijoDer.crearHoja() && HijoDerecho == null)
                {
                    HijoDerecho = new ArbolDecision <T>();
                    Dictionary <string, int> itemHoja = hijoDer.obtenerDatoHoja();
                    HijoDerecho.Dato = itemHoja;
                    datosEnd         = true;
                }
                //Si no es una hoja almaceno pregunta y vuelvo a llamar al método y pregunto de vuelta.
                else
                {
                    if (HijoDerecho == null)
                    {
                        HijoDerecho      = new ArbolDecision <T>();
                        HijoDerecho.Dato = hijoDer.obtenerPregunta();
                        HijoDerecho.MapArbol(hijoDer);
                    }
                    else
                    {
                        datosEnd = true;
                    }
                }

                Clasificador hijoIzq = new Clasificador(clasificador.obtenerDatosDerecho());
                if (hijoIzq.crearHoja() && HijoIzquierdo == null)
                {
                    HijoIzquierdo = new ArbolDecision <T>();
                    Dictionary <string, int> itemHoja = hijoIzq.obtenerDatoHoja();
                    HijoIzquierdo.Dato = itemHoja;
                    datosEnd           = true;
                }
                else
                {
                    //Si no es una hoja vuelvo a llamar al método y pregunto de vuelta.
                    if (HijoIzquierdo == null)
                    {
                        HijoIzquierdo      = new ArbolDecision <T>();
                        HijoIzquierdo.Dato = hijoIzq.obtenerPregunta();
                        HijoIzquierdo.MapArbol(hijoIzq);
                    }
                    else
                    {
                        datosEnd = true;
                    }
                }
            }

            return(this);
        }