Está en la página 1de 11

PREEXAMEN INTELIGENCIA ARTIFICIAL

0. INTRODUCTION TO AI

En cuanto a inteligencia artificial, se discuten formas de entender y crear sistemas inteligentes, entre ellos, sistemas
que imitan el comportamiento humano, la cognición humana, racionalidad humana y que actúan de forma racional.

I. Sistemas con comportamiento humano

En los ejemplos vemos como maquinas pueden simular el comportamiento humano, como la prueba de Turing, donde
una maquina dialoga con humanos y realiza tareas como escribir poesía o jugar al ajedrez. O ELIZA, que es un programa
que simula un terapeuta, demostrando que las maquinas pueden interactuar de forma significativa.

El primer bot que paso el test de Turing fue en 2014, Eugene Goostman.

II. Sistemas con cognición humana:

Se aborda como entender y construir sistemas inteligentes que piensen como humanos. Se exploran métodos para
comprender el pensamiento humano, como la introspección y pruebas que conducen a la construcción de una teoría
mental.

Se fusionan técnicas experimentales en psicología con modelos computacionales de IA en ciencia cognitiva.

III. Sistemas con cognición racional:

Se centra en comprender y construir sistemas inteligentes con pensamiento racional. Se revisa el desarrollo histórico
de la lógica formal desde Aristóteles hasta Robinson, destacando contribuciones como la idea de un lenguaje formal,
las leyes del pensamiento, y el desarrollo de la lógica.

IV: Sistemas con comportamiento racional

Se discute sobre agentes racionales que operan en entornos conocidos, estos tienen creencias sobre el mundo, deseos
u objetivos que quieren alcanzar, y crean planes o intenciones para lograr estos objetivos basados en sus creencias.

Los sistemas multiagentes, son lo que dice el nombre, desde 2 hasta cientos, estos comparten un objetivo común, que
es cooperar, coordinarse y comunicarse para lograrlo.

Sobre la evolución de la IA:

Todo empieza con los griegos en los años 40, el termino IA en los 50s por Darmouth y los neurocientíficos de McCulloch
Pitths, mas adelante apareció Internet, donde se invirtió muchísimo en obtener datos y en la capacidad de
computación, ahora en la actualidad, explosión de IA.

Podemos trabajar desde 4 perspectivas:

- Comportamiento: nos interesa la salida del asistente, no nos importa como funciona el sistema, nos importa
el resultado, una maquina que se comporte como una persona.
- Pensamiento: nos importa la parte interna, nos focalizamos en entender como pensamos, la parte cognitiva,
hacemos una maquina que piense como persona.

La segunda dualidad combinable es:

- Humano: queremos emular el comportamiento o pensamiento humano. Pero como no somos perfectos, no
nos interesa emular la perfección, queremos control.
- Formal: nos interesa la perspectiva formal, conjunto de reglas, lógica.

Queremos combinar el comportamiento y el humano, una maquina que se comporte como un humano, es algo
inteligente, para definir la pregunta creamos la prueba de Turing, tenemos que probar que realmente es asi: ¿Las
maquinas pueden pensar?

La prueba consiste en que hay una persona por un lado, y otra maquina, y una pared, no debemos poder diferenciar
entre la maquina o la persona.
Hay aplicaciones:

- Visión por computador: clasificación de imágenes con reconocimiento facial, detección de objetos,
segmentación de imágenes.
- Robótica: percepción y planificación de moción, donde buscamos un path para seguir.
- Procesamiento de lenguaje natural, con chatgpt, clasificación detexto, reconocimiento de entidades con
nombre, traducción de maquinas.
- Representación del conocimiento y razonamiento.
- Generación de texto desde texto. Maquinas entrenadas para predecir grandes textos.
- Generación de imágenes a imágenes.
- Generación de imágenes desde texto.
- Generación de videos desde texto o imágenes.

Los métodos son:

- Machine Learning: donde el Sistema aprende automáticamente, mejorando gradualmente su formación.


Aprende de datos, como experiencias pasadas, hay distintas técnicas de aprendizaje.

Hay problemáticas:

- Ética: problemas de sabiduría, control… se equivocan muchas veces. Fake nudes…


- Explainability: mecanismos que explican las decisiones de los algoritmos automáticos de la IA. Requeridos para
construir fiabilidad en la IA, y evitar discriminación, hay que regular.
1. RESOLUCION DE PROBLEMAS – BUSQUEDAS
a. FORMALIZACION DE PROBLEMAS
i. INTRODUCCION

Los inicios de la IA vienen de los años 50, de la reunión en el 56 donde empezaron a pensar como intentar usar los
ordenadores de forma inteligente, las personas eran Newell y Simón. Un problema era jugar al ajedrez, pero hicieron
un algoritmo que lo solucionaba, todo lo que pudiéramos plantear, bastante distinto a nuestra idea.

Para cada problema, tenemos una solución concreta, pero queremos un único algoritmo capaz de resolver cualquier
problema, por lo que aparece el GPS o General Problem Solver, donde para cualquier problema, nos da una solución.

Tenemos que representar todos los problemas de la misma manera, con la misma estructura, aprovechar
características, el proceso de pasarlos a un formato común es la formalizacion de los problemas. Para aprender a
hacerlo, cogemos tres problemas distintos y los adaptamos de la misma manera:

- Comerciante que viaja.


- Problema de los jarrones.
- Problema de puzle.
ii. ELEMENTOS BASICOS: ESTADOS Y OPERADORES

Los estados son las situaciones, cualquier situación posible con la que nos podemos encontrar mientras resolvemos un
problema, encontramos el estado inicial y el final donde queremos llegar, o conjunto de estados finales posibles. Los
otros son intermedios.

- Comerciante: 4 objetos, cualquiera puede estar en cualquier momento en derecha o izquierda -> 16
combinaciones. Como hay combinaciones que no nos interesan, como el lobo y oveja en un lado… 10 estados
posibles.
- Jarron: tenemos una lista de elementos que hay en la izquierda o derecha, una sola lista, o izquierda o derecha.
20 estados posibles, 5 estados en la primera y 4 en la segunda jarra.
- Puzle: cuantas formas de colocar números del 1-8 en una matriz, 9 posiciones, 9! Formas posibles.

En cuanto a operadores, es la forma como llegamos de un estado a otro, alguna acción que hacemos para pasar de una
situación a otra. Cualquier estado puede no aplicar todos los operadores, hay acciones que no podemos realizar.

iii. ESPACIO DE ESTADOS


El espacio de estados son los estados posibles movimientos, en un espacio de estados encontramos un grafo
etiquetado dirigido, con sus respectivos nodos, que son los estados posibles, las aristas, que es la aplicación de un
operador a un estado para pasar a otro diferente, y la etiqueta de las aristas, que es el identificador del operador
aplicado.

iv. SOLUCION DE UN PROBLEMA COMO BUSQUEDA DE UN CAMINO EN EL ESPACIO DE ESTADOS

En resumen, solucionar un problema es encontrar el camino en el espacio de estados que vaya desde el estado inicial
al final, y no tiene por qué existir siempre. Es encontrar un camino dentro del grafo, una secuencia de acciones que
nos lleve, si es que existe, ya que según el final y el inicial puede ser que no haya solucion.

Una solucion es:

- Una secuencia de estados que empieza en el estado inicial y acaba en el estado final, y tenemos un operador
que nos permite pasar entre estados.
- Una secuencia de operadores o acciones en un orden para pasar del estado inicial al final.

Si se repiten secuencias de estados, tiene sentido, es correcta, pero es cíclica, no la queremos. Una solucion debe ser
una secuencia de estados sin ciclos, sin repeticiones.

La estructura del grafo es el árbol de exploración, que es un árbol donde la raíz es el estado inicial, seleccionamos
hojas y aplicamos operadores para ver donde podemos ir, puede que llegue un momento en el que llegamos al estado
final, entonces vemos el camino para llegar. La exploración es un subconjunto de estados.

El problema está en encontrar la forma optima de ir desde el estado inicial al final, donde optimo habitualmente es el
camino mas corto. Otros problemas están en determinar si existe alguna solucion, o encontrar todas las soluciones, o
una solucion cualquiera.

No es factible construir todo el espacio de estados entero para explorarlo, Dijkstra no. Un gran coste computacional.

Cuando exploremos el espacio de estados, tenemos que tener en cuenta los nodos ya explorados, los nodos pendientes
y los no encontrados. Seleccionar un nodo pendiente, vigilar la aparición de ciclos, y detectar si un estado es nuevo, o
ya había sido explorado, o ya se conocía y esta pendiente.

b. ALGORITMO GENERAL DE BUSQUEDA

La resolución general de los problemas es una forma única de representar cualquier problema, un único algoritmo
que sepa resolver los problemas representados de esta forma. Recordamos que los elementos de la formalización de
los problemas se caracteriza por los estados, que son las situaciones donde nos podemos encontrar en un cierto
dominio y momento determinado, siendo estado inicial donde empezamos y final la situación donde queremos llegar,
y los operadores, que son las acciones que podemos hacer para pasar de estados o situaciones.

En cuanto al espacio de estados en la formalizacion, lo podemos representar como un grafo etiquetado dirigido, donde
los nodos son los estados, y las arestas las acciones o posibles aplicaciones de los operadores para pasar de un estado
a otro.

La solucion de un problema es encontrar un camino sin ciclos, si puede ser optimo, entre el estado inicial y el final en
el espacio de estados, teniendo en cuenta que puede no existir.

La busqueda de la solucion se realiza mediante la exploración del espacio de estados desde el estado inicial, intentando
encontrar un camino que lleve al estado final, por lo que construimos un árbol de exploración, básicamente se va
generando un subgrafo del espacio de estados a medida que se va ampliando la exploración.

Un ejemplo de exploración, si tenemos nodos, seria escoger un nodo pendiente de tratar, y si es el estado final,
paramos, sino, lo expandimos, que quiere decir que le aplicamos todos los operadores posibles, añadiendo hijos
nuevos a pendientes.

El primer ejemplo de busqueda seria el siguiente:


Tenemos tres atributos, pendientes, que empieza por el estado inicial, tratados, que empieza vacio, y encontrado, que
es un booleano que comienza en falso. Entonces, mientras no encontremos y los nodos pendientes no sean 0, cogemos
un nodo de pendiente, que será el nodo actual, quitamos el nodo de la lista de pendientes, si ese es el final, paramos,
ponemos trobat a cierto, sino, por todos los sucesores, si no están tratados y no están pendientes, añadimos a
pendientes y finalmente añadimos el nodo tratado a la lista de tratados. El final devuelve si lo ha encontrado o no.

Para obtener la solucion, el algoritmo anterior únicamente dice si existe una solucion o no, pero si la queremos
encontrar, el camino, podemos guardar para cada nodo N de pendientes, la informacion del camino seguido para llegar
desde ahí hasta el nodo.

Entonces, ahora cambia el algoritmo o ejemplo de exploración.

- Escogemos un nodo pendiente.


- Si es el estado final, acabamos y devolvemos el camino hacia el, sino, lo expandimos y aplicamos todos los
operadores posibles añadiendo los hijos nuevos a pendientes, guardando el camino hasta cada uno de ellos.

Por lo que ahora, en el atributo de nodos pendientes, será un hashmap, no solo contendrá el estado inicial en principio,
contendrá el estado y el camino. Y devolvemos el bool y el camino.

Sobre las técnicas de busqueda, las podemos definir como las distintas formas de encontrar el siguiente nodo a
expandir de pendientes y de guardar los nuevos nodos generados en la exploración a pendientes.

Sabiendo esto, tenemos dos posibilidades de busqueda:

- Busqueda no informada: donde seguimos un orden preestablecido, dependiendo de la estructura de datos


usada para guardar los nodos pendientes.
- Busqueda heurística: miramos el contenido de los nodos pendientes y los evaluamos de alguna forma
comparándolos con el estado final para decidir cual escoger.
c. TIPOS DE ALGORITMOS DE BUSQUEDA

El algoritmo general de busqueda es el primer


algoritmo que hemos visto, el que no tiene en
cuenta el camino hacia el nodo, simplemente
determina si hay o no hay un camino hacia el.

Si le añadimos el camino, seguirá siendo el


algoritmo general de busqueda, pero podrá
determinar un camino, o mantendrá la
informacion de los nodos que le llevan hacia el
estado final.

Hay dos formas de busqueda no informada:

- Por amplada: se refiere a la medida en


que se expande la busqueda en todas las
direcciones de forma uniforme. Comenzamos
en el estado inicial y exploramos todos los
nodos vecinos antes de pasar a los nodos
vecinos de ellos. Primero los nuestros, luego
los suyos.
- Inicialmente, la cola pendientes
contiene el estado inicial, que es el
punto de partida.
El algoritmo se implementa usando una
cola, la funcion coger_nodo de
pendientes se usa para ir cogiendo el
primer nodo de la cola.
Después de coger un nodo de la cola, se
va expandiendo a través de los nodos
vecinos y se agregan a la cola, la funcion
añadir(pendientes,x) agrega un nodo x al
final de la cola.
- Por profundidad: el algoritmo
comienza por el estado inicial y explora
lo mas lejos posible a lo largo de un
camino antes de retroceder y explorar
otras ramas.
Usamos una pila pendiente, que
contiene el estado inicial.
La función coger_nodo(pendientes) se usa para obtener el primer nodo de la pila.
Después de tomar un nodo de la pila, se expande a través de los vecinos y se agregan a la pila.

Ahora que ya sabemos los no informados, debemos entender la idea de los algoritmos de la busqueda heurística,
donde la idea es hacer algoritmos de busqueda mas inteligentes que los no informados. No podemos estar seguros de
cuál es el mejor camino, pero podemos intentar intuirlo. Podemos hacerlo comparando cada estado pendiente con el
estado final al que queremos llegar, cuanto mas cerca esté, mejor, si está mas lejos, peor.

Cada funcion que se nos acuda dará resultados distintos, pero contra mas informacion, mejores resultados, y mas coste
de calculo, hay que pensar heurísticas para cada problema.

i. BEST FIRST

Es una técnica usada en IA para encontrar


soluciones, prioriza los nodos a expandir
basándose en una funcion de evaluación,
normalmente llamada funcion heurística.
El algoritmo de busqueda comienza con la
inicialización de las variables, donde
tenemos los nodos pendientes, regidos por
el estado inicial, el camino, y la funcion
heurística que escogerá el mejor nodo
pendiente, una variable tratados vacia, y la
variable encontrada.

Mientras no lo encontremos el estado final


y los pendientes no sean 0, escogeremos el
mejor nodo en pendientes con la funcion,
lo eliminaremos de pendientes, y
comprobaremos si es o no el estado final.
Entonces, si el nodo no pertenece a tratados ni a pendientes, en la lista de pendientes, añadiremos el orden del nodo,
según el valor de la heurística. Si lo encuentra devuelve la solución, sino devuelve error.

Características: es completo, ya que mira todas las posibilidades, pero no es óptimo, ya que no garantiza que la
solución encontrada sea óptima.

Las heurísticas para best first son dependientes del dominio, y en cada instancia puede ir bien una distinta.
ii. A*

A* es un algoritmo de busqueda de camino que combina la busqueda por anchura con la busqueda de coste uniforme,
usa una heurística para evaluar los nodos y determinar la prioridad de expansión, lo que lo convierte en un algoritmo
informado. Es óptimo y
completo cuando la heurística
es admisible.

Se inicializan los nodos de listas


de pendientes, con la
heurística, los tratados, y la
variable encontrado. Mientras
no lo haya encontrado y aun
queden nodos pendientes,
cogemos el primer nodo de
pendientes y lo eliminamos, si
es el nodo final acabamos, sino,
por cada sucesor de N, si no
está tratado y no está en
pendientes, pues lo añadimos a
la lista de pendientes según la
heurística y el coste del camino,
y si el coste del camino es
menor que el coste de obtener
el camino, ósea, si mejora el camino hacia el siguiente nodo, le sobreescribimos el orden.

Un ejemplo de A* seria buscar el camino mas corto de A a B en un grafo, podemos usar la distancia de Manhattan
como heurística, que calcula la distancia horizontal y vertical entre dos nodos, es el valor absoluto de x1-x2 + y1-y2,
donde la heurística trivial será de 0 para todos, con esta se comporta como busqueda de costo uniforme porque no
hay informacion adicional. Con la heurística de distancia euclidiana, la heurística puede ser útil si los nodos están en
un espacio continuo y queremos minimizar la distancia. El resultado, lo dividimos entre 2.

iii. HILL CLIMBING

En Hill Climbing, cambia la inicialización de variables, no existe una lista de pendientes, ahora tenemos la inicialización
de un nodo con estado, camino, y valor heurístico, la lista de tratados inicializada a 0, y el bool de encontrado e hijos
mejores=cierto. Mientras no encuentre el final y haya hijos mejores, hacemos, en este algoritmo busca siempre un hijo
mejor, si no lo hay, se acaba.

Características: No es completo, porque no mira todas las posibilidades de no ser que sean todas mejores, y no es
óptimo, ya que no garantiza que la solución encontrada sea óptima.

Mejoras: no mantiene la lista de pendientes, por lo que ahorra memoria. Guia hacia el estado final, es mas inteligente
que las búsquedas no informadas, necesitan menos espacio y menos tiempo. Los contras son que hay que pensar
heurísticas para cada problema, que es difícil comparar heurísticas, que se puede quedar estancado sin encontrar la
solucion.

d. COMPARACION DE ALGORITMOS DE BUSQUEDA


Si las operaciones tienen costes distintos, en anchura ya no da el camino óptimo, y en profundidad quizás hay que
tener en cuenta el coste de los operadores para decidir el orden. Aquí es donde nace la busqueda con coste uniforme.

En el algoritmo de esta busqueda, cuando esta tratando los nodos pendientes, si el coste del camino mas operador es
menor que el coste de obtener el camino, entonces, sobreescribimos el orden.

El problema de la busqueda en coste uniforme es que solo tiene en cuenta el coste del camino hacia el nodo y no tiene
en cuenta lo que nos costará ir desde el nodo hasta el estado final.

Para ello, surge el algoritmo A*, que tiene en cuenta las dos cosas, aquí surge la funcion heurística, donde:

𝑓 (𝑛) = 𝑔(𝑛) + ℎ (𝑛);


Siendo g el coste de llegar hasta el nodo, que lo sabemos, y h el coste de ir del nodo al estado final, que podríamos
estimarlo, ya que no lo sabemos. Esto no garantiza la solucion optima, en el caso general, pero si la funcion heurística
es admisible siempre la encuentra. Una heurística es admisible, cuando el valor estimado siempre es igual o mas
pequeño que el coste real.

e. DIFERENCIA ENTRE A* Y BEST FIRST

A* combina la busqueda amplada con coste uniforme actualizando la funcion de evaluación que tiene en cuenta el
coste acumulado desde el nodo inicial al actual g(n) como una estimación del costo desde el nodo actual hasta el
objetivo h(n). Determina la prioridad con la funcion heurística. Garantiza encontrar la solucion optima.

Best-First es un termino general, no necesariamente tienen en cuenta el costo acumulado, la selección del siguiente
nodo se basa únicamente en una estimación heurística de qué tan cerca está cada nodo del objetivo, sin considerar el
coste acumulado hasta el nodo. No garantiza la solucion optima.

2. REPRESENTACION DEL CONOCIMIENTO


a. INTRODUCCIÓN A LA REPRESENTACION DEL CONOCIMIENTO

En los años 50 y 60, se dieron los primeros pasos significativos en el campo de la IA, se desarrollaron los primeros
resolutores generales de problemas y mecanismos de busqueda basados en la exploración de grandes espacios de
estados.

Algunos problemas eran:

- Los mecanismos eran genéricos: había muchos desafíos, era difícil definir estados y operadores en problemas
del mundo real, como diagnósticos médicos, predicciones…
- Costes computacionales altos: las búsquedas en grandes espacios eran caras, las no informadas sobretodo.
- Los métodos eran débiles: Necesidad de busqueda heurística: para abordar desafíos, surge la heurística, que
usa informacion adicional. Solo tenían en consideración informacion conocida de los estados, y no usaban el
conocimiento del dominio para guiar el proceso de busqueda, como datos de historial clínico, personales…

Entonces, en la década de los 70s, se produjo un cambio de paradigma en el campo de la IA, hacia el enfoque en
sistemas basados en el conocimiento o sistemas expertos. Para resolver problemas complejos del mundo real, que
requerían un amplio conocimiento de un dominio especifico. Las características de estos eran:

- Algoritmos orientados al mundo real: se desarrollaron con el objetivo de abordar problemas del mundo real
que requieren de conocimiento en una area.
- Amplio conocimiento del dominio: hay que tener acceso al conjunto de conocimientos en el dominio relevante.
Representado de forma estructurada y accesible.
- Rendimiento comparable al de un experto humano: La meta era que los sistemas expertos pudieran tomar
decisiones y resolver problemas de forma tan efectiva como lo harían un experto humano en el mismo campo.

Para obtener el conocimiento, hay distintas formas:

- Entrevistas con expertos en el dominio, que es la forma más habitual, pero un procedimiento lento y costoso,
donde hay dificultad de comunicación entre ingenieros y el experto, y hay falta de colaboración por parte de
ellos.
- Observación de los expertos: los expertos usan herramientas semi automáticas de adquisición del
conocimiento, o simuladores de dominio, que son programas específicos para un dominio, técnicas poco
generalizables.
- Aprendizaje automático: construcción automática a partir de un conjunto de ejemplos resueltos.

A partir de toda la información, se inducen arboles de decisiones: Outlook: Sunny, Overcast, Rainy, Humidity…

La representación del conocimiento es un campo de la IA que estudia los mecanismos para guardar conocimiento de
un dominio dentro de un sistema computacional de forma que se pueda usar de forma eficiente para resolver
problemas complejos.

Los mecanismos de representación del conocimiento son a partir de lenguaje formal, que permite representar el
conocimiento de forma estructurada y precisa, debe ser expresivo para capturar complejidad en distintos dominios. La
construcción de expresiones precisas tiene que tener su semántica clara, representan conceptos y reglas relevantes.
Otro mecanismo son los algoritmos eficientes de razonamiento sobre la informacion, una vez la información esta
representada, se necesitan algoritmos para realizar el razonamiento sobre la información. Permiten inferir
conclusiones, tomar decisiones, resolver problemas…

Hay un compromiso entre la expresividad del lenguaje de representación y la complejidad computacional de los
procesos del razonamiento.

El conocimiento del dominio en IA se puede clasificar en categorías, cada una comprende diferentemente el problema:

- Conocimiento factual: es la informacion especifica y objetiva de un dominio particular que puede ser
representada de manera correcta, comprendiendo diferentes aspectos:
o Clases de objetos: que definen categorías o tipos de entidades, como en un sistema de gestion de
bibliotecas, donde las clases son los libros, autores…
o Los objetos son instancias individuales de las clases.
o Las propiedades son atributos de los objetos, como año, titulo…
o Las restricciones sobre valores, que son reglas sobre el año de publicación, como >0.
o Los valores, que son los datos asignados a las propiedades.
- Conocimiento procedural o procedimental: es la informacion sobre como realizar acciones o procedimientos
en un momento determinado, describe las secuencias o acciones que se tienen que llevar a cabo para llegar a
un objetivo. Cuando pedir datos al usuario, cuando hacer una secuencia de acciones…
- Conocimiento heurístico o experiencial: es el conocimiento que se deriva principalmente de la experiencia o
intuición, se usa para realizar inferencias rápidas y aproximadas sobre situaciones o problemas, basándose en
patrones observados. Cara groga -> problema de fetge.
b. PRESENTACION DE LOGICA, LENGUAJE DE LA LOGICA DE PREDICADOS

La lógica matemática es una rama de las matemáticas que estudia los procesos del razonamiento, los componentes
del razonamiento son un conjunto positivo de premisas, que son los datos de entrada, y una conclusión, que es una
derivación de las premisas.

Un razonamiento se considera valido si, siempre que las premisas sean ciertas, la conclusión tambien lo es, no puede
ser falsa si las premisas son ciertas. La conclusión es una consecuencia lógica de las premisas, sino, el razonamiento es
invalido.

Una lógica debe proporcionar un lenguaje formal en el que podamos representar las premisas y la conclusión de un
razonamiento. Deben proporcionar mecanismos que permitan determinar si una conclusión se puede deducir a partir
de un conjunto de premisas, que es la validación, y descubrir la informacion que se puede deducir lógicamente a partir
de un conjunto de premisas, que es el razonamiento, inferencia o deducción.

El origen de la lógica matemática viene de los filósofos griegos, de Aristóteles, que vio que la validez de un
razonamiento depende de la forma de las premisas y de la conclusión, y no de la verdad que dicen. Según el, si todos
los hombres son mortales, y Sócrates es un hombre, es mortal: Todos los A son B, si X es A, X es B.

Algo invalido seria: si algunos humanos son hombres y todos los hombres son mortales, Sócrates es humano, por lo
que es mortal. Algunos A son B, todos los B son C, X es A, por lo que X es C.

Continuamos con Ramon Llull, que escribió el Ars Magna, que era un tipo de maquina lógica, en la que se
representaban aspectos teológicos con formas geométricas, palancas, proposiciones se paraban delante de posiciones
marcadas como cierto o falso.

A continuación, Gottfried Leibniz, retomo la idea de expresar los razonamientos en un lenguaje formal para que
pudieran ser manipulados de forma mecánica. Desarrolló la maquina de Leibniz, que podía hacer sumas, restas,
multiplicaciones, divisiones y raíces.

Después apareció Boole, definiendo un conjunto de reglas algebraicas que se tenían que seguir para deducir
conclusiones correctas a partir de unas premisas.
Luego Frege, que fue un matemático conocido por desarrollar la Begriffsschrift o escritura de conceptos, que era un
sistema de notación, que introdujo un lenguaje formal basado en aritmética para representar el pensamiento puro.
Presentaba proposiciones lógicas y matemáticas de forma precisa.

Finalmente, Robinson fue un investigador en el campo de la IA, donde uno de sus logros fue la introducción de la
resolución, un metodo que puede validar automáticamente un razonamiento, implica transformar las premisas y la
conclusión a una forma normal predefinida.

Aquí es donde aparece el lenguaje de la lógica de predicados, que es un sistema formal usado para representar
conocimiento en diversos dominios, donde sus elementos básicos permiten representar objetos, clases, propiedades,
relaciones… se refiere al conocimiento factual del dominio, podemos construir expresiones llamadas formulas para
representar afirmaciones o proposiciones sobre el mundo.

- Una constante es un nombre que representa a un objeto: a, b, c, …, Sócrates, Dumbo…


- Un predicado unario representa una propiedad de un objeto, como Mortal(Sócrates), vuela(Dumbo)… Una
propiedad define una clase de individuos.
- Un predicado n-ario es un predicado con n parámetros, que representa una relacion entre n objetos. Como
hermanos(toni, pere), o pares(joan, toni, eva). Si lo aplicamos sobre n constantes es una formula atómica, se
pueden construir formulas mas complejas usando las conectivas lógicas.

Conectivas lógicas:

- Conjunción ∧, i: se usa para combinar dos proposiciones en una nueva, la resultante es verdadera solo si ambas
son verdaderas. Pare(joan)^Mare(Eva). AND.
- Disyuncion ∨, o: Combina dos proposiciones, la resultante es verdadera solo si una de ellas lo es. OR. O uno u
otro irá a la fiesta, o ambos. Al menos uno.
- Condicional →, si ... entonces ...: establece una relacion de implicación entre dos proposiciones, si la
proposición inicial o antecedente es verdadera, entonces la siguiente tambien. Pare(joan,toni)->Fill(toni,joan).
- Negación ¬, no: operador que se usa para formar la negación de una proposición, indicamos que una
proposición es falsa.

Cuantificadores:

- Universal ∀: sirve para indicar que todos los objetos de un dominio tienen una propiedad, si f es una formula,
∀variable(F) tambien lo es.
- Existencial ∃: sirve para indicar que hay como mínimo un objeto del dominio que tiene una cierta propiedad,
si f es una formula, ∃variable de f tambien lo es.

Hay combinaciones de los cuantificadores y relaciones entre ellos.

Podemos describir un enfoque de representación del conocimiento usando la lógica para modelar un dominio
especifico, en este caso, el Covid-19, lo explicamos:

- Base de conocimiento: se presenta el conocimiento del dominio como un conjunto de formulas lógicas, las
formulas representan relaciones entre variables y predicados que caracterizan las condiciones y síntomas
asociados con el covid:
o ∀x ((Tos(x) ∧ FebreAlta(x) ∧ ¬Olora(x)) → SospitósCOVID(x)), si un individuo x tiene tos, fiebre alta y no
tiene olor, entonces es sospechoso de covid-19.
o Otra formula lógica que indica que si alguien es considerado sospechoso de tener covid, entonces se
tiene que hacer una PCR: ∀x (SospitósCOVID(x) → FerProvaPCR(x))
- Motor de inferencia: cuando se reciben datos de un nuevo paciente, el motor de inferencia usara el
conocimiento para diagnosticar la enfermedad, usara las reglas lógicas definidas en la base del conocimiento
para ingerir conclusiones lógicas sobre el estado de salud. El motor de inferencia es el componente central en
IA, se encarga de procesar las reglas lógicas y conocimiento almacenado para generar conclusiones o
inferencias lógicas.
- Ejemplo de datos del paciente: si toni tiene una temperatura de 39.2 grados y no huele, estos datos son
entradas para el motor de inferencia, que aplicará las reglas definidas para determinar si es sospechoso de
covid.

En resumen, la lógica matemática es la rama de las matemáticas que estudia el razonamiento y es el mecanismo de
representación del conocimiento más clásico de la IA. Proporciona un lenguaje para representar informacion y
mecanismos para hacer deducciones a partir de datos o para ver si un razonamiento es válido.

c. RESOLUCION EN LOGICA DE PRIMER ORDEN

Cualquier formula en lógica predicada se puede traducir a forma normal Skolem, donde hay una secuencia de
cauntificadores universales a la izquierda, y una formula en forma normal sin cuantificadores a la derecha.

- Reemplazamos los condicionales por su forma equivalente: (A->B) = (¬A ˅ B).


- Movemos las negaciones dentro del paréntesis cambiando el o o y:
o  ¬(A ^ B) = (¬A ˅ ¬B)
o  ¬(A ˅ B) = (¬A ^ ¬B)
o  ¬¬A = A
- Aplicamos distribucion e idempotencia si es necesario:
o A ^ (B ˅ C) = (A ^ B) ˅ (A ^ C)
o A ˅ (B ^ C) = (A ˅ B) ^ (A ˅ C)
o (A ^ A) = A
o (A ˅ A) = A

En resumen, la forma normal tiene un prefijo con cuantificadores, y una expresión sin ellos. Se puede expresar en
forma normal conjuntiva o disjuntiva.

- Eliminamos los condicionales ->


- Aplicamos las reglas de Morgan para quitar negaciones y ponerlas a nivel mas interno.
- Rebajamos las variables con distribución.
- Aplicamos las reglas para llevar los cuantificadores a la izquierda.

Ejemplo, tenemos: (A->B)^ ¬ (C ∨ D):

- Quitamos el condicional: (A->B) se convierte en (¬A ∨ B), entonces tenemos: (¬A ∨ B) ∧ ¬ (C ∨ D)


- Si hubiera alguna negación fuera, la convertimos a dentro. (¬A ∨ B) ∧ (¬C ^ ¬D)
- Vamos repitiendo, aunque ya tenemos la forma final.

Ya que tenemos la forma normal, ahora podemos hacer la parte de Skolemitzacion, que se basa en quitar los ∃.
Mientras quede alguna variable cuantificada existencialmente, tenemos que repetir:
- Eliminamos el cuantificador existencial, de izquierda a derecha, substituimos la variable, donde se encuentre,
por una funcion de Skolem. Hay que usar una distinta por variable.
d. APUNTES DE LOGICA

Ejercicio 5.3:

- ∀x Px → ∃x Qx:
o Quitamos ->: ¬(∀x Px) ∨ ∃x Qx
o Aplicamos Morgan: ∃x ¬Px ∨ ∃x Qx
o Aplicamos distribución: ∃x (¬Px ∨ Qx)
o
o
o
e. REPRESENTACION DEL CONOCIMIENTO Y ONTOLOGIAS
f. INGENIERIA DE ONTOLOGIAS
g. DESARROLLO DE ONTOLOGIAS CON PROTEGE

También podría gustarte