Descargar

Inteligencia Artificial

Enviado por fprmaster


    Inteligencia Artificial

     

    FUNDAMENTOS DE LA INTELIGENCIA ARTIFICIAL

    En primer lugar, revisemos algunas definiciones generales de inteligencia, antes de intentar definir inteligencia artificial. Inteligencia es la aptitud de crear relaciones. Esta creación puede darse de manera puramente sensorial, como en la inteligencia animal; también puede darse de manera intelectual, como en el ser humano, que pone en juego el lenguaje y los conceptos. También se la puede conceptuar como la habilidad para adquirir, comprender y aplicar conocimiento; o como la aptitud para recordar, pensar y razonar.

    La IA es una nueva generación de tecnología informática, caracterizada no sólo por su arquitectura (hardware), sino también por sus capacidades. El énfasis de generaciones previas fue en las computaciones numéricas para aplicaciones científicas o de negocios. La nueva generación de tecnología informática incluye además la manipulación simbólica, con el objetivo de emular el comportamiento inteligente; y, la computación en paralelo, para tratar de conseguir resultados prácticamente en tiempo real. La capacidad predominante de la nueva generación, también conocida como la Quinta Generación, es la habilidad de emular (y tal vez en algunos casos superar) ciertas funciones inteligentes del ser humano.

    Por ejemplo:

    Aprendizaje:

    • Captación automática de conocimientos.

    Razonamiento:

    • Sistemas basados en conocimientos.
    • Bases de datos inteligentes.
    • Prueba de teoremas y juegos.

    Percepción:

    • Comprensión de lenguaje natural.
    • Interpretación de escenas visuales (Visión por computadora).

    Locomoción y Manipulación:

    Creación:

    • Generación, verificación, depuración y optimización automática de programas.

    Algunas de las tareas que estos sistemas realizan en el campo de la IA son:

    Tareas generales

    • Percepción: Visión, Fonemas.
    • Lenguaje Natural: Comprensión, generación y traducción.
    • Razonamiento de sentido común.
    • Control de robots.

    Tareas formales

    • Juegos: Ajedrez, Backgammon, Damas.
    • Matemáticas: Geometría, Lógica, Cálculo Integral.

    Tareas expertas

    • Ingeniería: Diseño, Localización de fallas, Planeamiento.
    • Análisis Científico.
    • Diagnóstico Médico.
    • Análisis Financiero.

    TÉCNICAS DE SOLUCIÓN

    Las técnicas de solución de problemas en IA, en general, incorporan un proceso de búsqueda. Todo proceso de búsqueda puede ser visualizado como el recorrido por un árbol en el que cada nodo representa un estado y cada rama representa las relaciones entre los estados cuyos nodos conecta.

    En general, las reglas contienen en forma implícita el árbol, y se genera en forma explícita sólo aquellas partes que se decide explorar. Las principales diferencias que pueden aparecer en las diferentes técnicas de búsqueda, son:

    • La dirección en la cual se conduce la búsqueda (hacia adelante o hacia atrás).
    • La estrategia de control, o forma de seleccionar las reglas que pueden ser aplicables. Los principales requerimientos de una buena estrategia de control son: que cause desplazamiento en el espacio de estado; y, que sea sistemático.
    • La forma de representar cada nodo del proceso de búsqueda (representación del conocimiento).

    Muchas veces, tratar el proceso como búsqueda en un grafo en lugar de una búsqueda en un árbol, puede reducir el esfuerzo que se gasta en explorar senderos, esencialmente iguales, varias veces. Sin embargo, los requisitos asociados, son:

    • Cada vez que se genere un nodo se debe chequear para ver si ha sido generado antes.
    • Se deben introducir procedimientos especiales para que la búsqueda no quede atrapada en algún lazo.

    A continuación se describen los algoritmos de tres procesos básicos de búsqueda de soluciones en el espacio de estado.

    Algoritmo Generación Y Prueba (GENERATE-AND-TEST)

    1. Generar una posible solución. (estado o camino)

    2. Comprobar para ver si es una solución, mediante comparación con los elementos del conjunto de objetivos aceptables.

    3. Si la solución ha sido encontrada salir, de otra manera, retornar al paso 1.

    Algoritmo Primero a lo Ancho (BREATH-FIRST)

    1. Crear una variable NODE_LIST y ponerla al estado inicial.

      1. Remover el primer elemento de NODE_LIST, y llamarlo E. Si NODE_LIST estuvo vacía, salir.

        1. Aplicar la regla para generar un nuevo estado.

        2. Si el nuevo estado es un estado objetivo, salir y retornar este estado.
        3. Sino, añada el nuevo estado al final de NODE_LIST.
      2. Para cada forma en que cada regla puede ajustarse al estado descrito en E, haga lo siguiente:
    2. Hasta que se encuentre el objetivo o hasta que NODE_LIST esté vacía haga lo siguiente:

    Algoritmo Primero en Profundidad (DEPTH-FIRST)

    1. Si el estado inicial es el objetivo, salir y retornar éxito.

      1. Genere un sucesor E del estado inicial. Si no hay más sucesores, retorne con señal de fracaso.

      2. Llame recursivamente al algoritmo, esta vez con E como el estado inicial.
      3. Si la señal es éxito, retorne, de otra manera, continúe en este lazo.
    2. Sino, haga lo siguiente hasta que se obtenga señal de éxito o fracaso:

    Búsqueda Heurística

    Para resolver muchos problemas difíciles (explosión combinatoria), es necesario muchas veces llegar a un compromiso de los requerimientos de movilidad y sistematicidad y construir una estructura de control que no necesariamente garantiza el encontrar la mejor respuesta, sino que casi siempre encuentra una buena respuesta. Una técnica heurística mejora la eficiencia del proceso de búsqueda sacrificando, usualmente, exhaustividad.

    Las consideraciones que sirven de soporte a un proceso de búsqueda heurística, son:

    • Rara vez se requiere, en realidad, una solución óptima. Una buena aproximación, normalmente, sirve muy bien.
    • A pesar que una aproximación heurística no puede resultar muy buena en el peor de los casos, raras veces aparecen los peores casos en la práctica.
    • El tratar de comprender por qué un heurístico funciona o por qué no funciona, a menudo conduce a una mejor comprensión del problema.

     

    SISTEMAS DE PRODUCCION

    Un sistema de producción proporciona una estructura que facilita la descripción y la ejecución de un proceso de búsqueda. Un sistema de producción consiste de:

    • Un conjunto de facilidades para la definición de reglas.
    • Mecanismos para acceder a una o más bases de conocimientos y datos.
    • Una estrategia de control que especifica el orden en el que las reglas son procesadas, y la forma de resolver los conflictos que pueden aparecer cuando varias reglas coinciden simultáneamente.
    • Un mecanismo que se encarga de ir aplicando las reglas.

    Dentro de esta definición general de sistema de producción, se incluyen:

    • Lenguajes básicos para sistemas de producción (LISP, CLIPS, PROLOG). También se los conoce como lenguajes de Inteligencia Artificial.
    • Sistemas híbridos y sistemas vacíos (shells) para producción de sistemas basados en conocimientos (VP-Expert, Expert Teach, Personal Consultant, Intelligence Compiler, EXSYS).
    • Arquitecturas generales para resolución de problemas (máquinas LISP, máquinas PROLOG).

    Características de los Sistemas de Producción

    Un sistema de producción, al igual que los problemas, puede ser descrito por un conjunto de características que permiten visualizar la mejor forma en que puede ser implementado.

    Un sistema de producción se dice que es monotónico si la aplicación de un regla nunca evita que más tarde se pueda aplicar otra regla que también pudo ser aplicada al momento en que la primera fue seleccionada.

    Un sistema de producción es parcialmente conmutativo si existe un conjunto de reglas que al aplicarse en una secuencia particular transforma un estado A en otro B, y si con la aplicación de cualquier permutación posible de dichas reglas se puede lograr el mismo resultado.

    Un sistema de producción es conmutativo, si es monotónico y parcialmente conmutativo.

     

    SISTEMA DE PRODUCCIÓN

    MONOTÓNICO

    NO-MONOTÓNICO

    PARCIALMENTE CONMUTATIVO

     

    Demostración de Teoremas

    Navegación Robótica

    PARCIALMENTE NO CONMUTATIVO

     

    Síntesis Química

    Juego de Ajedrez

     

    Procesos Heurísticos de Búsqueda

    Las técnicas heurísticas de búsqueda son como guías de turismo. Buenas, en el sentido que señalan aspectos de gran interés general, pero malas ya que pueden no satisfacer aspectos de interés particular.

    Existen varias técnicas heurísticas buenas, de propósito general, que son útiles para una diversidad de problemas. Adicionalmente, es posible construir heurísticos especiales que exploten conocimiento específico en cada dominio, para resolver problemas particulares.

    Ascenso a Colina (Hill Climbing)

    Es una variante del algoritmo de búsqueda de generación y prueba. Del procedimiento de prueba existe una realimentación que ayuda al generador a decidirse por cual dirección debe moverse en el espacio de búsqueda. En estos procesos se abandona la búsqueda si no existe un estado alternativo razonable al que se pueda mover.

    Los algoritmos de ascenso a colina son típicamente locales, ya que deciden qué hacer, mirando únicamente a las consecuencias inmediatas de sus opciones. Puede que nunca lleguen a encontrar una solución, si son atrapados en estados que no son el objetivo, desde donde no se puede hallar mejores estados, por ejemplo:

     

    1. Un máximo local, que es un estado mejor que sus vecinos pero no es mejor que otros que están algo más alejados.

    2. Una meseta, es un espacio de búsqueda en el que todo un conjunto de estados vecinos tienen igual valor.

    3. Un risco, que es un tipo especial de máximo local, imposible de atravesar con movimientos simples.

    Hay algunas formas que pueden ayudar a solventar estos problemas, aunque no existe garantía:

    1. Para evitar máximos locales, regresar a un estado anterior y explorar en una dirección diferente.

    2. Para casos de mesetas, dar un salto grande en alguna dirección y tratar de encontrar una nueva sección del espacio de estado.

    3. Para los riscos, aplicar dos o más reglas, antes de realizar una prueba del nuevo estado, esto equivale a moverse en varias direcciones a la vez.

    Los algoritmos de ascenso a colina, a pesar de explorar sólo un paso adelante, al examinar el nuevo estado pueden incluir una cierta cantidad de información global codificada en la función objetivo o función heurística.

    Recocido Simulado (Simulated Annealing)

    Es una variación del ascenso a colina. Al inicio, este algoritmo, permite explorar una buena parte del espacio de estado, de tal forma que la solución final puede resultar insensible al estado inicial. En consecuencia, la probabilidad de quedar atrapado en un máximo local, en una meseta o en un risco, se hace mínima.

    El recocido simulado es un proceso computacional que refleja los pasos establecidos en el proceso físico de tratamiento térmico de materiales. En el recocido, por ejemplo, un metal es llevado a elevados niveles energéticos, hasta que alcanza su punto de fusión. Luego, gradualmente es enfriado hasta alcanzar un estado sólido, de mínima energía, previamente definido. Por su naturaleza, este algoritmo debe ser formulado como un descenso a valle en el que la función objetivo es el nivel energético.

    Las sustancias físicas usualmente se mueven desde configuraciones de alta energía a las de menor energía, así que el descenso al valle, ocurre en forma natural.

     

    Pero, eventualmente pueden haber transiciones a niveles energéticos más altos, con una probabilidad dada por

     

     

    T es la Temperatura absoluta y k es la constante de Boltzmann.

    El procedimiento que se va a seguir para enfriar el sistema, se llama programa de recocido. Su forma óptima depende de cada tipo de problema y usualmente se lo descubre empíricamente. El programa de recocido, debe incluir los siguientes ingredientes:

    1. El valor inicial de la temperatura.

    2. El criterio que será utilizado para decidir cuando reducir la temperatura.

    3. La cantidad en que será reducida la temperatura.
    4. Cuando finalizar el proceso.

    El algoritmo para el recocido simulado, es ligeramente diferente del procedimiento simple de ascenso a colina. Las diferencias son:

    1. Se debe respetar el programa de recocido.

    2. Movimientos a estados peores que el actual, pueden ser aceptados.
    3. Se debe mantener, a más del estado actual, el mejor estado encontrado hasta el momento. Así, si por alguna razón el estado final resulta peor que el mejor encontrado anteriormente, siempre será posible regresar a él.

    Primero el Mejor (Best-First)

    Este algoritmo, combina las ventajas de los algoritmos primero en profundidad y primero en amplitud. Sigue un sendero a la vez, pero puede cambiarse a otro sendero que parece más prometedor que el que está siguiendo.

    En este sentido, puede considerarse que es un algoritmo que realiza su proceso de búsqueda en un grafo de tipo O, ya que todos sus ramales representan una alternativa de solución. Para su operación, el algoritmo necesita dos listas de nodos y una función heurística que estime los méritos de cada nodo que se genere:

     

    1. ABIERTOS – Es una variable que contiene los nodos que han sido generados. La función heurística ha sido aplicada a ellos, pero todavía no han sido examinados, es decir no se han generado sus sucesores. ABIERTOS puede considerarse como una COLA DE PRIORIDADES en la que los elementos con mayor prioridad son los que tienen los valores más prometedores, dados por la función heurística.

    2. CERRADOS – Es una variable que contiene los nodos que han sido examinados. Es necesario tener esta información, para que la búsqueda sea en un grafo y no en un árbol.

    3. FUNCIÓN HEURÍSTICA – Permite que el algoritmo busque primero por senderos que son o parecen más prometedores.

    Para muchas aplicaciones, es conveniente definir esta función f', como la suma de dos, que se las llamará g y h'. La función g es una medida del costo de llegar desde el nodo inicial al nodo actual. La función h' es una estimación del costo adicional para llegar desde el nodo actual al estado objetivo. Aquí es donde se explota el conocimiento que se dispone sobre el dominio del problema.

    Es decir, la función combinada f' representa una estimación del costo de llegar desde el estado inicial hasta el estado objetivo, siguiendo el sendero que ha generado el nodo actual. Si el nodo actual ha generado más de un sendero, el algoritmo deberá dejar registrado sólo el mejor.

    El algoritmo, en la forma que fue formulado, se aplica a grafos. Puede ser simplificado para aplicarse a árboles, si no se preocupa de comprobar si un nuevo nodo esta en ABIERTOS o en CERRADOS. Esto aceleraría la generación de nodos y la búsqueda, para casos en que es poco probable que se repitan nodos.

    Usualmente, el costo de ir de un nodo a su sucesor, g, se fija en una constante igual 1, cuando se desea encontrar un sendero a la solución, que involucre el menor número de pasos. Si por el contrario nos interesa encontrar el camino menos costoso y algunos operadores cuestan más que otros, se asume un valor de g, que refleje esos costos. Un valor de g igual a cero significaría que simplemente nos interesa llegar a alguna solución, de cualquier manera.

    Si h' es un estimador perfecto de h, hará que A* converja inmediatamente al objetivo, sin búsqueda. Mientras mejor sea h', más cerca se estará de alcanzar esta aproximación directa. Si h' vale cero, la búsqueda será controlada por g. Si el valor de g es también cero, hará que la búsqueda sea aleatoria. Si el valor de g es siempre 1, hará que la búsqueda sea primero en anchura. Para los casos en que h' no sea perfecto ni cero, y nunca llega a sobrestimar el valor de h, el algoritmo A* está garantizado que encontrará un sendero óptimo a un objetivo, en caso de que exista solución. Cuando un algoritmo garantiza el encontrar una solución óptima, si esta existe, se dice que es admisible.

    Teorema de Admisibilidad

    Si h' nunca sobrestima a h entonces A* es admisible. La única manera de garantizar que h' nunca sobrestime a h es haciéndolo cero, pero con ello estamos en la búsqueda primero en anchura, es decir el algoritmo es admisible, pero no eficiente.

    Pero existe un corolario que puede ser de utilidad en casos prácticos:

    COROLARIO: Si h' muy rara vez sobrestima h por más de  entonces el algoritmo A* rara vez encontrará una solución cuyo costo sea mayor más que en  que el costo de la solución óptima.

    Bajo ciertas condiciones, el algoritmo A* puede ser óptimo, en el sentido de generar el menor número de nodos posibles, en el proceso de encontrar una solución, pero bajo otras condiciones puede no serlo.

    Algoritmo Guiado por Agenda

    Una agenda es una lista de tareas que un sistema podría realizar. Asociado con cada tarea están, usualmente, dos cosas: una lista de razones de por qué se propone la tarea (justificaciones); y, un valor representando el peso de la evidencia que sugiere que la tarea podría ser útil.

    Reducción de Problema

    La estructura de grafo tipo Y-O es útil para representar la solución de problemas que pueden ser descompuestos en un conjunto de problemas más pequeños. Esta descomposición o reducción genera enlaces de tipo Y. Enlaces de tipo Y apuntan a cualquier número de nodos sucesores que deben ser resueltos para ver si es que el enlace apunta hacia una solución. Los enlaces Y se indican con un arco que conecta los enlaces componentes.

    Para la descripción del algoritmo de búsqueda en un grafo Y-O se definirá un valor llamado INUTILIDAD. Si el valor estimado para una solución se hace mayor que el valor de INUTILIDAD, se abandona la búsqueda. El valor de INUTILIDAD debe escogerse para que cualquier solución con un costo superior resulte demasiado cara como para ser de utilidad práctica, aún en el caso de que sea posible encontrarla.

    Algoritmo AO*

    El algoritmo anterior, es una simplificación del algoritmo denominado como AO*. En este algoritmo se emplea una estructura GRAFO, representando parte del grafo de búsqueda que ha sido explícitamente generado hasta el momento. Cada nodo en el grafo apuntará tanto a sus inmediatos sucesores, como hacia sus inmediatos predecesores, tendrá su correspondiente valor h' pero no habrá un valor de g ya que puede darse el caso que exista varios senderos al mismo nodo, dificultando su cálculo.

    Satisfacción de Requisitos

    Muchos problemas en Inteligencia Artificial pueden ser vistos como problemas que requieren de la satisfacción de ciertos requisitos, para poder llegar a una solución. Ejemplos de este tipo de problemas son: los llamados rompecabezas criptaritméticos y tareas de diseño que tienen limitaciones en tiempo, costo y materiales.

    Análisis de Medios Y Metas (Means-Ends)

    Esta técnica permite en primer lugar resolver las mayores partes de un problema y luego regresar para resolver los problemas más pequeños que pueden aparecer al ensamblar las soluciones a las partes mayores. El proceso se centra en la detección de diferencias entre el estado actual y el estado objetivo. Una vez que se aísla dicha diferencia, se necesita encontrar un operador que reduzca la diferencia.

    Pero es posible que el operador encontrado no pueda ser aplicado al estado actual. En este caso, se define como subproblema el alcanzar el estado en el que el operador pueda ser aplicado. Puede también suceder que la aplicación del operador no nos conduce exactamente al estado objetivo deseado. Si tal es el caso, se define un como subproblema el llegar desde el estado producido, al objetivo.

    Cuando la diferencia ha sido escogida correctamente y el operador es realmente efectivo, normalmente resulta más fácil resolver los dos subproblemas, que el problema original. Luego, el algoritmo puede ser aplicado en forma recursiva.

    Para enfocar la atención del sistema primero en los problemas grandes, se pueden asignar niveles de prioridad a las diferencias. Así, diferencias de mayor prioridad, serán atendidas antes que las de menor prioridad.

    Al igual que otras técnicas de solución de problemas, el análisis de medios y metas se basa en un conjunto de reglas que pueden transformar un estado del problema en otro. Las reglas están escritas de tal forma que el lado izquierdo describe las condiciones que deben cumplirse para que la regla sea aplicable (precondiciones de la regla) y el lado derecho describe aquellos aspectos del estado del problema que será cambiados por la aplicación de la regla (resultados). Una estructura de datos separada, llamada tabla de diferencias, indexa las reglas de acuerdo con las diferencias que pueden reducir, al ser usadas.

    REPRESENTACIÓN DEL CONOCIMIENTO

    En organismos biológicos se estima que el conocimiento es almacenado como estructuras complejas de neuronas interconectadas.

    En las computadoras, el conocimiento también se almacena como estructuras simbólicas, pero en forma de estados eléctricos y magnéticos.

    En forma natural, el ser humano representa el conocimiento simbólicamente: imágenes, lenguaje hablado y lenguaje escrito. Adicionalmente, ha desarrollado otros sistemas de representación del conocimiento: literal, numérico, estadístico, estocástico, lógico.

    La ingeniería cognoscitiva ha adaptado diversos sistemas de representación del conocimiento que, implantados en un computador, se aproximan mucho a los modelos elaborados por la psicología cognoscitiva para el cerebro humano. Entre los principales se tienen:

    Lógica Simbólica Formal:

    – Lógica proposicional

    – Lógica de predicados.

    – Reglas de producción.

    Formas Estructuradas:

    Redes asociativas.

    – Estructuras marco.

    – Representación orientada a objetos.

    Lógica Proposicional

    La lógica proposicional es la más antigua y simple de las formas de lógica. Utilizando una representación primitiva del lenguaje, permite representar y manipular aserciones sobre el mundo que nos rodea. La lógica proposicional permite el razonamiento, a través de un mecanismo que primero evalúa sentencias simples y luego sentencias complejas, formadas mediante el uso de conectivos proposicionales, por ejemplo Y (AND), O (OR). Este mecanismo determina la veracidad de una sentencia compleja, analizando los valores de veracidad asignados a las sentencias simples que la conforman.

    Una proposición es una sentencia simple que tiene un valor asociado ya sea de verdadero (V), o falso (F). Por ejemplo:

    Hoy es Viernes

    Ayer llovió

    Hace frío

    La lógica proposicional, permite la asignación de un valor verdadero o falso para la sentencia completa, no tiene facilidad par analizar las palabras individuales que componen la sentencia. Por este motivo, la representación de las sentencias del ejemplo, como proposiciones, sería:

    hoy_es_Viernes

    ayer_llovió

    hace_frío

    La proposiciones pueden combinarse para expresar conceptos más complejos. Por ejemplo:

    hoy_es_Viernes y hace_frío.

    A la proposición anterior dada como ejemplo, se la denomina fórmula bien formada (well-formed formula, wff). Una fórmula bien formada puede ser una proposición simple o compuesta que tiene sentido completo y cuyo valor de veracidad, puede ser determinado. La lógica proposicional proporciona un mecanismo para asignar valores de veracidad a la proposición compuesta, basado en los valores de veracidad de las proposiciones simples y en la naturaleza de los conectores lógicos involucrados.

     

    Representación mediante Lógica de Predicados

    La principal debilidad de la lógica proposicional es su limitada habilidad para expresar conocimiento. Existen varias sentencias complejas que pierden mucho de su significado cuando se las representa en lógica proposicional. Por esto se desarrolló una forma lógica más general, capaz de representar todos los detalles expresados en las sentencias, esta es la lógica de predicados.

    La lógica de predicados está basada en la idea de las sentencias realmente expresan relaciones entre objetos, así como también cualidades y atributos de tales objetos. Los objetos pueden ser personas, objetos físicos, o conceptos. Tales cualidades, relaciones o atributos, se denominan predicados. Los objetos se conocen como argumentos o términos del predicado.

    Al igual que las proposiciones, los predicados tienen un valor de veracidad, pero a diferencia de las preposiciones, su valor de veracidad, depende de sus términos. Es decir, un predicado puede ser verdadero para un conjunto de términos, pero falso para otro.

    Por ejemplo, el siguiente predicado es verdadero:

    color (yerba, verde)

    el mismo predicado, pero con diferentes argumentos, puede no ser verdadero:

    color (yerba, azul) o color (cielo, verde)

     

    Los predicados también pueden ser utilizados para asignar una cualidad abstracta a sus términos, o para representar acciones o relaciones de acción entre dos objetos. Por ejemplo:

    mortal(juan_carlos)

    clima(martes, lluvioso)

    ave(gaviota)

    ama(roberto, vanessa)

    lee(alex, novela)

    mordio(boby, cartero)

    Al construir los predicados se asume que su veracidad está basada en su relación con el mundo real. Naturalmente, siendo prácticos, trataremos que los predicados que definimos estén de acuerdo con el mundo que conocemos, pero no es absolutamente necesario que así lo hagamos. En lógica de predicados el establecer como verdadero un predicado es suficiente para que así sea considerado.

    Demos el siguiente ejemplo, que indica que Ecuador está en Europa:

    parte_de(ecuador, europa)

    Obviamente, esto no es verdadero en el mundo real, pero la lógica de predicados no tiene razón de saber geografía y si el predicado es dado como verdadero, entonces es considerado como lógicamente verdadero. Tales predicados, establecidos y asumidos como lógicamente verdaderos se denominan axiomas, y no requieren de justificación para establecer su verdad.

    La lógica de predicados, se ocupa únicamente de métodos de argumentación sólidos. Tales argumentaciones se denominan Reglas de Inferencia. Si se da un conjunto de axiomas que son aceptados como verdaderos, las reglas de inferencia garantizan que sólo serán derivadas consecuencias verdaderas.

    Tanto los conectivos lógicos, como los operadores dados anteriormente para la lógica proposicional, son igualmente válidos en lógica de predicados. De hecho, la lógica proposicional es un subconjunto de la lógica de predicados.

    Cada uno de los argumentos en los ejemplos de predicados dados anteriormente, representan a un objeto específico. Tales argumentos se denominan constantes. Sin embargo, en la lógica de predicados se pueden tener argumentos que en determinado momento pueden ser desconocidos. Estos son los argumentos tipo variable.

    En el ejemplo: color (yerba, X), la variable X, puede tomar el valor de verde, haciendo que el predicado sea verdadero; o puede tomar el valor de azul, dando lugar a que el predicado sea falso.

    Las variables, también pueden ser cuantificadas. Los cuantificadores que típicamente se utilizan en lógica de predicados son:

    • El cuantificador universal; indica que la fórmula bien formada, dentro de su alcance, es verdadera para todos los valores posibles de la variable que es cuantificada. Por ejemplo:

     X . . . .

    Establece que "para todo X, es verdad que . . . "

    • El cuantificador existencial; , indica que la fórmula bien formada, dentro de su alcance, es verdadera para algún valor o valores dentro del dominio. Por ejemplo:

     X . . . .

    Establece que "existe un X, tal que . . . "

     

    A continuación se dan algunos ejemplos de predicados cuantificados:

     X, [niño (X) => le_gusta (X, helados)].

     Y, [mamífero (Y) => nace (Y, vivo)].

     Z, [cartero(Z) ^ mordió (boby, Z)].

    Desde el punto vista de representación, los cuantificadores son difíciles de usar. Por lo que es deseable reemplazarlos con alguna representación equivalente, más fácil de manipular. El caso del cuantificador universal es más simple ya que se asume a todas las variables como universalmente cuantificadas.

    El cuantificador existencial es más difícil de reemplazar. El cuantificador existencial garantiza la existencia de uno o más valores particulares (instancias) de la variable cuantificada, que hace a la cláusula verdadera. Si se asume que existe una función capaz de determinar los valores de la variable que hace la cláusula verdadera, entonces simplemente se remueve el cuantificador existencial y se reemplaza las variables por la función que retorna dichos valores. Para la resolución de problemas reales, esta función, llamada función de Skolem, debe ser conocida y definida.

    Unificación

    Cuando se tienen sentencias compuestas por predicados y conectivos lógicos, se debe evaluar la veracidad de cada uno de sus componentes para determinar si toda la sentencia es verdadera o falsa. Para ello, se busca en el conjunto de axiomas la forma de establecer la veracidad de los predicados componentes. Un predicado componente se dice que es verdadero si se identifica con un axioma de la base de información. En la lógica de predicados, este proceso es algo complicado ya que las sentencias pueden tener términos variables. A los predicados que tienen variables por argumentos, se los denomina patrones.

    La unificación es el proceso de computar las sustituciones apropiadas que permitan determinar si dos expresiones lógicas, ya sean predicados o patrones, coinciden.

    El proceso de unificación involucra los siguientes pasos:

    • Todo predicado que no contenga variables en sus argumentos, deben tener un axioma que se identifique totalmente, para considerarlo como verdadero.
    • Si un predicado contiene una variable, esta debe ser asociada a un valor determinado. Esta asociación se realiza buscando en la base de axiomas y seleccionando todos aquellos que se identifican con el patrón en todo, excepto por la variable. La variable es asociada con el valor en la posición correspondiente del axioma. Si más de un axioma se identifica con el predicado dado, todos los valores asociados son considerados y son tratados separadamente.
    • El proceso de identificación continua asumiendo que el valor de la variable es el valor asociado, en cualquier lugar que esta aparezca.
    • Los conectivos lógicos son aplicados a todos los predicados, para determinar la veracidad de la sentencia dada.

    INFERENCIA Y RAZONAMIENTO

    Inferir es concluir o decidir a partir de algo conocido o asumido; llegar a una conclusión. A su vez, razonar es pensar coherente y lógicamente; establecer inferencias o conclusiones a partir de hechos conocidos o asumidos.

    El proceso de razonamiento, por lo tanto, involucra la realización de inferencias, a partir de hechos conocidos. Realizar inferencias significa derivar nuevos hechos a partir de un conjunto de hechos conocidos como verdaderos. La lógica de predicados proporciona un grupo de reglas sólidas, con las cuales se pueden realizar inferencias. Las principales Reglas de Inferencia son:

    Modus ponens.- Es la más importante, en los sistemas basados en conocimiento. Establece que:

    Si las sentencias p y (p  q) se conocen que son verdaderas,

    entonces se puede inferir que q también es verdadera.

    Modus tolens.- Esta regla establece que:

    Si la sentencia (p  q) es verdadera y q es falsa,

    entonces se puede inferir que p también es falsa.

    Resolución.- Utiliza refutación para comprobar una determinada sentencia. La refutación intenta crear una contradicción con la negación de la sentencia original, demostrando, por lo tanto, que la sentencia original es verdadera. La resolución es una técnica poderosa para probar teoremas en lógica y constituye la técnica básica de inferencia en PROLOG, un lenguaje que manipula en forma computacional la lógica de predicados. La regla de resolución, establece que:

    Si (A B) es verdadero y (~B  C) es verdadero,

    entonces (A  C) también es verdadero

    En lógica de predicados, existen tres métodos básicos de razonamiento: deductivo, abductivo e inductivo.

    Deducción.- Es el razonamiento a partir de un principio conocido hacia un desconocido; de lo general, a lo específico, o de la premisa a la conclusión lógica. La deducción realiza inferencias lógicamente correctas. Esto significa que la deducción a partir de premisas verdaderas, garantiza el resultado de conclusiones también verdaderas.

     

    La deducción es el método más ampliamente comprendido, aceptado y reconocido de los tres indicados. Es la base tanto de la lógica proposicional, como de la lógica de predicados. A manera de ejemplo, el método deductivo, se puede expresar, utilizando lógica de predicados, como sigue:

     A,  B,  C, [mayor (A, B)  mayor (B, C)  mayor (A, C)]

    Abducción.- Es un método de razonamiento comúnmente utilizado para generar explicaciones. A diferencia de la inducción, la abducción no garantiza que se puedan lograr conclusiones verdaderas, por lo tanto no es un método sólido de inferencia. La forma que tiene la abducción es la siguiente:

    Si la sentencia (A  B) es verdadera y B es verdadera,

    entonces A es posiblemente verdadera.

    En abducción, se empieza por una conclusión y se procede a derivar las condiciones que podrían hacer a esta conclusión válida. En otras palabras, se trata de encontrar una explicación para la conclusión.

    Inducción.- Se define como el razonamiento a partir de hechos particulares o casos individuales, para llegar a una conclusión general. El método inductivo es la base de la investigación científica. La forma más común del método inductivo es la siguiente:

    Si se conoce que P(a), P(b), ……, P(n) son verdaderos,

    entonces se puede concluir que  X, P(X) es también verdadero.

    La inducción es una forma de inferencia muy importante ya que el aprendizaje, la adquisición de conocimiento y el descubrimiento están basados en ella. Al igual que la abducción, la inducción no es un método sólido de inferencia.

    El razonamiento deductivo es una forma monotónica de razonar que produce argumentos que preservan la verdad. En un sistema monotónico todos los axiomas utilizados se conocen como verdaderos por sus propios méritos, o pueden ser derivados de otros hechos conocidos como verdaderos. Los axiomas no pueden cambiar, ya que una vez que se los conoce como verdaderos, siempre permanecen así y no pueden ser modificados o retractados. Esto significa que en el razonamiento monotónico el conjunto de axiomas continuamente crece en tamaño.

    Otro aspecto del razonamiento monotónico es que si más de una inferencia lógica puede ser hecha a un tiempo específico y una de ellas se realiza, las inferencias que quedan serán todavía aplicables después que dicha inferencia haya sido hecha.

    REPRESENTACIÓN MEDIANTE REGLAS DE PRODUCCIÓN

    Los sistemas basados en reglas son los más comúnmente utilizados. Su simplicidad y similitud con el razonamiento humano, han contribuido para su popularidad en diferentes dominios. Las reglas son un importante paradigma de representación del conocimiento.

    Las reglas representan el conocimiento utilizando un formato SI-ENTONCES (IF-THEN), es decir tienen 2 partes:

    • La parte SI (IF), es el antecedente, premisa, condición o situación; y
    • La parte ENTONCES (THEN), es el consecuente, conclusión, acción o respuesta.

    Las reglas pueden ser utilizadas para expresar un amplio rango de asociaciones, por ejemplo:

    SI está manejando un vehículo Y se aproxima una ambulancia, ENTONCES baje la velocidad Y hágase a un lado para permitir el paso de la ambulancia.

    SI su temperatura corporal es de 39 ºC, ENTONCES tiene fiebre.

    SI el drenaje del lavabo está tapado Y la llave de agua está abierta, ENTONCES se puede inundar el piso.

    Inferencia Basada en Reglas

    Una declaración de que algo es verdadero o es un hecho conocido, es una afirmación (fact). El conjunto de afirmaciones se conoce a menudo con el nombre de memoria de trabajo o base de afirmaciones. De igual forma, al conjunto de reglas se lo denomina base de reglas.

    Un sistema basado en reglas utiliza el modus ponens para manipular las afirmaciones y las reglas durante el proceso de inferencia. Mediante técnicas de búsqueda y procesos de unificación, los sistemas basados en reglas automatizan sus métodos de razonamiento y proporcionan una progresión lógica desde los datos iniciales, hasta las conclusiones deseadas. Esta progresión hace que se vayan conociendo nuevos hechos o descubriendo nuevas afirmaciones, a medida que va guiando hacia la solución del problema.

    En consecuencia, el proceso de solución de un problema en los sistemas basados en reglas va realizando una serie de inferencias que crean un sendero entre la definición del problema y su solución. Las inferencias están concatenadas y se las realiza en forma progresiva, por lo que se lo que se dice que el proceso de solución origina una cadena de inferencias.

    Los sistemas basados en reglas difieren de la representación basada en lógica en las siguientes características principales:

    • Son en general no-monotónicos, es decir hechos o afirmaciones derivadas, pueden ser retractados, en el momento en que dejen de ser verdaderos.
    • Pueden aceptar incertidumbre en el proceso de razonamiento.

    EL PROCESO DE RAZONAMIENTO

    El proceso de razonamiento en un sistema basado en reglas es una progresión desde un conjunto inicial de afirmaciones y reglas hacia una solución, respuesta o conclusión.

    Como se llega a obtener el resultado, sin embargo, puede variar significativamente:

    • Se puede partir considerando todos los datos conocidos y luego ir progresivamente avanzando hacia la solución. Este proceso se lo denomina guiado por los datos o de encadenamiento progresivo (forward chainning).
    • Se puede seleccionar una posible solución y tratar de probar su validez buscando evidencia que la apoye. Este proceso se denomina guiado por el objetivo o de encadenamiento regresivo (backward chainning).

    Razonamiento Progresivo

    En el caso del razonamiento progresivo, se empieza a partir de un conjunto de datos colectados a través de observación y se evoluciona hacia una conclusión. Se chequea cada una de las reglas para ver si los datos observados satisfacen las premisas de alguna de las reglas. Si una regla es satisfecha, es ejecutada derivando nuevos hechos que pueden ser utilizados por otras reglas para derivar hechos adicionales. Este proceso de chequear reglas para ver si pueden ser satisfechas se denomina interpretación de reglas.

    La interpretación de reglas es realizada por una máquina de inferencia en un sistema basado en conocimiento. La interpretación de reglas, o inferencia, en el razonamiento progresivo involucra la repetición de los pasos que se indican en la siguiente figura.

     

     

    Razonamiento Progresivo…

    1. Unificación (Matching).- En este paso, en las reglas en la base de conocimientos se prueban los hechos conocidos al momento para ver cuáles son las que resulten satisfechas. Para decir que una regla ha sido satisfecha, se requiere que todas las premisas o antecedentes de la regla resuelvan a verdadero.

    2. Resolución de Conflictos.- Es posible que en la fase de unificación resulten satisfechas varias reglas. La resolución de conflictos involucra la selección de la regla que tenga la más alta prioridad de entre el conjunto de reglas que han sido satisfechas.
    3. Ejecución.- El último paso en la interpretación de reglas es la ejecución de la regla. La ejecución puede dar lugar a uno o dos resultados posibles: nuevo hecho (o hechos) pueden ser derivados y añadidos a la base de hechos, o una nueva regla (o reglas) pueden ser añadidas al conjunto de reglas (base de conocimiento) que el sistema considera para ejecución.

    En esta forma, la ejecución de las reglas procede de una manera progresiva (hacia adelante) hacia los objetivos finales.

    Un conjunto de aplicaciones adecuadas al razonamiento progresivo incluye supervisión y diagnóstico en sistemas de control de procesos en tiempo real, donde los datos están continuamente siendo adquiridos, modificados y actualizados. Estas aplicaciones tienen 2 importantes características:

    1. Necesidad de respuesta rápida a los cambios en los datos de entrada.
    2. Existencia de pocas relaciones predeterminadas entre los datos de entrada y las conclusiones derivadas.

    Otro conjunto de aplicaciones adecuadas para el razonamiento progresivo está formado por: diseño, planeamiento y calendarización, donde ocurre la síntesis de nuevos hechos basados en las conclusiones de las reglas. En estas aplicaciones hay potencialmente muchas soluciones que pueden ser derivadas de los datos de entrada.

    Debido a que estas soluciones no pueden ser enumeradas, las reglas expresan conocimiento como patrones generales y las conexiones precisas entre estas reglas no pueden ser predeterminadas.

    Razonamiento Regresivo

    El mecanismo de inferencia, o interprete de reglas para el razonamiento regresivo, difiere significativamente del mecanismo de razonamiento progresivo. Si bien es cierto ambos procesos involucran el examen y aplicación de reglas, el razonamiento regresivo empieza con la conclusión deseada y decide si los hechos que existen pueden dar lugar a la obtención de un valor para esta conclusión. El razonamiento regresivo sigue un proceso muy similar a la búsqueda primero en profundidad.

    El sistema empieza con un conjunto de hechos conocidos que típicamente está vacío. Se proporciona una lista ordenada de objetivos (o conclusiones), para las cuales el sistema trata de derivar valores. El proceso de razonamiento regresivo utiliza esta lista de objetivos para coordinar su búsqueda a través de las reglas de la base de conocimientos. Esta búsqueda consiste de los siguientes pasos:

    1. Conformar una pila inicialmente compuesta por todos los objetivos prioritarios definidos en el sistema.

    2. Considerar el primer objetivo de la pila. Determinar todas las reglas capaces de satisfacer este objetivo, es decir aquellas que mencionen al objetivo en su conclusión.

      1. Si todos los antecedentes de la regla son satisfechos (esto es, cada parámetro de la premisa tiene su valor especificado dentro de la base de datos), entonces ejecutar esta regla para derivar sus conclusiones. Debido a que se ha asignado un valor al objetivo actual, removerlo de la pila y retornar al paso (2).

      2. Si alguna premisa de la regla no puede ser satisfecha, buscar reglas que permitan derivar el valor especificado para el parámetro utilizado en esta premisa.
      3. Si en el paso (b) no se puede encontrar una regla para derivar el valor especificado para el parámetro actual, entonces preguntar al usuario por dicho valor y añadirlo a la base de datos. Si este valor satisface la premisa actual entonces continuar con la siguiente premisa de la regla. Si la premisa no es satisfecha, considerar la siguiente regla.

      Si todas las reglas que pueden satisfacer el objetivo actual se han probado y todas no han podido derivar un valor, entonces este objetivo quedará indeterminado. Removerlo de la pila y retornar al paso (2). Si la pila está vacía parar y anunciar que se ha terminado el proceso.

      El razonamiento regresivo es mucho más adecuado para aplicaciones que tienen mucho mayor número de entradas, que de soluciones posibles. La habilidad de la lógica regresiva para trazar desde las pocas conclusiones hacia las múltiples entradas la hace más eficiente que el encadenamiento progresivo.

      Una excelente aplicación para el razonamiento regresivo es el diagnóstico, donde el usuario dialoga directamente con el sistema basado en conocimiento y proporciona los datos a través del teclado. Problemas de clasificación también son adecuados para ser resuelto mediante el razonamiento regresivo.

       

      SISTEMAS BASADOS EN CONOCIMIENTO

      Los métodos generales desarrollados para la resolución de problemas y técnicas de búsqueda al inicio de la era de la IA demostraron no ser suficientes para resolver los problemas orientados a las aplicaciones, ni fueron capaces de satisfacer los difíciles requerimientos de la investigación. A este conjunto de métodos, procedimientos y técnicas, se lo conoce como Inteligencia Artificial Débil. La principal conclusión que se derivó de este trabajo inicial fue que los problemas difíciles sólo podrían ser resueltos con la ayuda del conocimiento específico acerca del dominio del problema.

      La aplicación de estas ideas dio lugar al desarrollo de los denominados Sistemas Basados en Conocimiento (Knowledge Based Systems) y al aparecimiento de la Ingeniería Cognoscitiva, como una rama de la IA, que estudia los sistemas basados en el conocimiento. La definición de un sistema basado en conocimiento puede ser simplemente la siguiente:

      Es un sistema computarizado capaz de resolver problemas en el dominio en el cual posee conocimiento específico.

      La solución es esencialmente la misma que hubiera dado un ser humano confrontado con idéntico problema, aunque no necesariamente el proceso seguido por ambos puede ser igual.

      El simple concepto dado, puede causar confusión ya que muchos sistemas basados en programas convencionales podrían ser incorrectamente categorizados como sistemas basados en conocimiento. Esta inconsistencia puede ser aclarada, sobre la base de tres conceptos fundamentales que distinguen a los sistemas basados en conocimiento de los programas algorítmicos convencionales y de los programas generales basados en búsqueda (IA débil):

    3. Para cada una de estas reglas examinar en turno sus antecedendentes:

    4. La separación que existe entre el conocimiento, y la forma cómo éste es utilizado.

    5. El uso de conocimiento específico de un determinado dominio.
    6. La naturaleza heurística, antes que algorítmica del conocimiento utilizado.

    Dicho de una manera simple, los programas convencionales utilizan algoritmos para resolver problemas, mientras que los sistemas basados en conocimiento resuelven problemas donde las soluciones algorítmicas no existen o son muy costosas para ser implementadas.

    Experiencia, Habilidades y Conocimiento

    Los tipos de experiencia que son interés en los sistemas basados en conocimiento, pueden ser clasificados en tres categorías: asociativa, motora y teórica.

    Los sistemas basados en conocimiento son excelentes para representar conocimiento asociativo. Este tipo de experiencia refleja la habilidad heurística o el conocimiento que es adquirido mayoritariamente, a través de la observación. Puede ser que no se comprenda exactamente lo que ocurre al interior de un sistema (caja negra), pero se puede asociar entradas o estímulos con salidas o respuestas, para resolver problemas que han sido previamente conocidos.

    La experiencia motora es más física que cognitiva. La habilidad se adquiere fundamentalmente a través del ejercicio y la práctica física constante. Los sistemas basados en conocimiento no pueden emular fácilmente este tipo de experiencia, principalmente por la limitada capacidad de la tecnología robótica.

    La experiencia teórica y el conocimiento profundo permite que los humanos podamos resolver problemas que no los hemos visto antes, es decir que no existe una posibilidad asociativa. El conocimiento teórico y profundo se lo adquiere a través de estudio y entrenamiento formal, así como por medio de la resolución directa de problemas. Debido a la naturaleza teórica, este conocimiento se lo puede olvidar fácilmente, a no ser que se lo use en forma continua. Al momento, los sistemas convencionales basados en conocimiento tienen muchas dificultades para duplicar este tipo de experiencia. Sin embargo, los Sistemas de Razonamiento Basado en Modelos representan un notable intento de encapsular este conocimiento profundo y razonar con él.

    En las siguientes secciones se concentrará el estudio en los sistemas basados en conocimiento que representan experiencias de tipo asociativo.

    Estructura de los SBC

    La arquitectura de un sistema basado en conocimiento de alguna manera refleja la estructura cognitiva y los procesos humanos. La primera parte es la memoria de largo plazo, en la que guarda los hechos (Base de Hechos) y los conocimientos (Base de Conocimientos) acerca del dominio en el que tiene experiencia.

     

     

     

     

     

     

     

     

     

     

     

     

     

    Figura 6.1. Estructura de un sistema basado en conocimiento

     

    La segunda parte es el sistema que realiza la función de razonamiento para resolver problemas (Motor de Inferencia). Finalmente, la tercera parte la conforman las unidades de entrada y salida que permiten la comunicación entre el sistema y su entorno.

    A continuación se describen las principales características de estas unidades.

    El Motor de inferencia (MI)

    Selecciona, decide, interpreta y aplica el conocimiento de la base de conocimientos sobre la base de hechos con el fin de obtener la solución buscada. Un mecanismo de inferencia debe ser independiente del conocimiento y de los hechos. Está caracterizado por:

    • El lenguaje en que ha sido escrito.
    • La velocidad de trabajo: Inferencias/segundo.
    • Las estrategias de búsqueda de soluciones:

    No Ordenada: aleatoria, heurística.

    Ordenada: Encadenamiento hacia adelante (guiado por los datos, deductivo), encadenamiento hacia atrás (guiado por los objetivos, inductivo).

    • La forma en que elige el conocimiento.
    • La posibilidad de incorporar metaconocimiento.
    • El tipo de lógica que emplea en el razonamiento:

    Booleana, trivalente, multivalente, difusa.

    Monotónica o no monotónica.

    Atemporal o temporal.

    Lógica de orden 0, orden 0+, orden 1.

    • El método que utiliza para la evaluación del conocimiento incompleto o incierto:

    Determinístico.

    Probabilístico.

    Aproximado.

    Difuso.

    La Base de Conocimientos

    Contiene el conocimiento del dominio en el cual el programa es competente. El conocimiento tiene que estar representado en la forma que resulte más adecuada para el dominio de su competencia. Adicionalmente hay que tratar que esa representación sea:

    • Sencilla.
    • Independiente.
    • Fácil de modificar.
    • Transparente: justificación de soluciones y explicación de los procesos.
    • Relacional.
    • Potente: poder expresivo y eficiencia de cálculo.

    Un aspecto importante de una base de conocimientos es su capacidad, expresada sobre la base del número de reglas que posee:

    • Demostración interesante: 50 reglas.
    • Prototipo funcional: 250 reglas.
    • SE operacional medio: 500 – 1000 reglas.
    • SE operacional especial: 4000 reglas.

    Una base de conocimientos debe ser coherente, rápida, modular, fácil de desarrollar y mantener.

    La Base de Hechos

    La base de hechos es el conjunto de información invariable de una a otra resolución. Los hechos se diferencian de los datos en el sentido que los hechos forman parte del SBC, mientras que los datos, al poder variar de una solución a otra, conviene agruparlos en archivos externos al SBC.

    Algunos autores no consideran a la base de hechos en forma independiente. Los conocimientos y los hechos pueden aparecer conjuntamente en una sola base, la de conocimientos.

    Los Módulos de Comunicación

    Un SE necesita medios y canales adecuados, sencillos y potentes, para comunicarse:

    • Con el usuario:Para permitir el diálogo en forma sencilla.
    • Con el experto:Para la configuración del sistema; para la adquisición, mantenimiento, depuración y validación del conocimiento.
    • Con archivos externos: Bases de datos, hojas electrónicas de cálculo, archivos de texto, programas.

    SISTEMAS EXPERTOS

    Desde el punto de vista de la especificidad del conocimiento, los sistemas basados en conocimiento ocupan un lugar intermedio entre los sistemas originales de IA débil, en los que el conocimiento utilizado es de carácter general, y los Sistemas Expertos (SE) que operan en un dominio muy restringido, utilizando conocimiento altamente especializado.

    A la luz de esta cadena de desarrollo, un sistema experto puede ser definido como un sistema basado en conocimiento que emula la competencia de un experto, dentro de un campo de aplicación bien delimitado. También puede ser definido como un conjunto de programas de computadora cuyo comportamiento es similar al que tendría un experto humano

     

    Características de los Sistemas Expertos

    Para que un sistema computacional actúe como un verdadero experto, es deseable que reúna, en lo posible, lo más importante de las características de un experto humano, esto es:

    • Habilidad para adquirir conocimiento.
    • Fiabilidad, para poder confiar en sus resultados o apreciaciones.
    • Solidez en el dominio de su conocimiento.
    • Capacidad para resolver problemas.

    Dada la complejidad de los problemas que usualmente tiene que resolver un SE, puede existir cierta duda en el usuario sobre la validez de respuesta obtenida. Por este motivo, es una condición indispensable que un SE sea capaz de explicar su proceso de razonamiento o dar razón del por qué solicita tal o cual información o dato.

     

     

    Faustino Peraza Rodriguez

    E-Mail :