# Inteligencia artificial para videojuegos/Representación del conocimiento
## Introducción

La representación del conocimiento y el razonamiento es un área de la inteligencia artificial cuyo objetivo fundamental es representar el conocimiento de una manera que facilite la inferencia, sacar conclusiones a partir de dicho conocimiento. Analiza cómo pensar formalmente, cómo usar un sistema de símbolos para representar un dominio del discurso, junto con funciones que permitan inferir sobre los objetos.
El conocimiento es la acción de conocer, de aprender información útil, la cuál nos permita conectar con el pasado e imaginar un futuro basado en el conocimiento adquirido. En el ámbito de los videojuegos, el conocimiento puede ser aplicado a diferentes actores, o en este caso personajes, para que actúen de manera racional. Actuar racionalmente consiste en el siguiente paradigma: Entorno[Agente <-siente-, -piensa-, -actúa->...].

##### Motivación

Un avance en conocimiento puede ser pasar de representación atómica a representación factorizada, esto puede provocar problemas de satisfacción de restricciones que se resuelve eficientemente asignando valores a variables.

### Nuevo marco de trabajo

Con el término de conocimiento racional aplicado a las IAs, éstas, ya no se consideran como resolutores, sino que pasan a ser agentes racionales ya que:
* Los problemas y sus posibles soluciones son los estados de ese entorno de trabajo en el que se encuentran.
* El marco de trabajo cambia en el tiempo, y las configuraciones son los estados de dicho entorno cambiante
* El éxito de una inteligencia se basa en el rendimiento de esa IA según la solución de un problema en un estado determinado del entorno de trabajo.
* Estos agentes racionales suelen ser bastante complejos y puede que reaccione basándose en modelos, objetivos y utilidad necesaria.

## Agente basado en conocimiento

El saber (o conocer) ayuda al agente racional a realizar diversas tareas. Los humanos somos capaces de resolver cualquier problema planteable. Sin embargo, nosotros no somos capaces de resolver problemas según determinados estados en un entorno, cosa que si es útil en los agentes inteligentes en ciertas situaciones. Es posible diseñar un agente racional usando diferentes técnicas como la búsqueda de una solución óptima en un amplio abanico de soluciones o redes neuronales artificiales. Pero estas inteligencias estarán limitadas por el escaso conocimiento de lo que está ocurriendo y de lo que están haciendo. Simplemente buscan soluciones a problemas según un algoritmo.
En IAV se utilizará una vista lógica, una representación factorizada para dar soluciones a problemas generales e independientes:
* Modificando sus conocimientos.
* Modificando sus objetivos.
* Mejorando lo aprendido.
Como Ejemplo podríamos poner el Agente en el mundo de Wumpus (Hunt the Wumpus(1975))
* Su entorno 4x4 con posiciones aleatorias.
* Sus percepciones : Hedor, Brisa, Brillo,Choque y Grito.
* Sus acciones son : Avanzar, Rotar izq ,Rotar der, Coger, Disparar y Salir.
(Véase fotos de ejemplo, *No he podido introducir fotos de ejemplo...*)
https://en.wikipedia.org/wiki/Hunt_the_Wumpus

## Base de conocimiento

La base del conocimiento(KNOWLEDGE BASE) es un componente fundamental para los agentes basados en conocimiento que permite:
* Establecer sentencias(axiomas y sentencias derivadas).
* Dar una interfaz a la base para decir y preguntar sentencias.
* Establecer una serie de conocimientos previos mediante la inferencia.
En cuanto a su funcionamiento, cada inferencia se dice como sentencia, se pregunta la acción a realizar, se dice la acción realizada. Este proceso se realiza a nivel del conocimiento, no de implementación.

## Principios de la lógica

Dos términos a definir:
* Sintaxis: Cómo están formadas las sentencias.
* Sémantica: Un estado del mundo que satisface la sentencia.
Una sentencia P contiene (⊨) a otra Q (Entailment). Un algoritmo de inferencia deriva nuevas sentencias a partir de la base:
* Correcto: Si la base contiene (⊨) a dichas sentencias.
* Completo: Si dichas sentencias son todas las sentencias que contiene (⊨) la base.

## Lógica proposicional

Las sentencias lógicas más sencillas son las proposiciones:
| Sentencia | Sentencia Atómica o Sentencia Compleja |
| Sentencia Atómica | True, False, P, Q, R... |
| Sentencia Compleja | (Sentencia), [Sentencia], Sentencia ^ Sentencia, Sentencia v Sentencia... |
En cuanto a su representación, la semántica define la verdad de una proposición. Esa verdad puede ser:
* Atómica: CIERTO es cierto, FALSO es falso.
* Compuesta: se utilizan tablas de verdad
TABLAS DE VERDAD :
| P | Q | ¬P | P∧Q | PvQ | P->Q | P<->Q |
| false | false | true | false | false | true | true |
| false | true | true | false | true | true | false |
| true | false | false | false | treu | false | false |
| true | true | false | true | trrue | true | true |

### Inferencia

Inferir es deducir. Responder una pregunta supone probar si esa proposición se deriva de nuestra base. El algortimo más obvio a simple vista es probar si cuando la base es cierta, la proposición también, para todos los modelos posibles(combinaciones cierto/falso de cada uno de los S símbolos). Esto se conoce como Model checking. Toda esta combinatoria suele costar demasiado, por lo que podemos construir solo la prueba que demuestra que la sentencia deriva de la base. Para la construcción de dicha prueba,utilizaremos la equivalencia lógica( Fórmulas P → Q ≡ ¬P ∨ Q ¬(P ∨ Q) ≡ ¬P ∧ ¬Q ), la validez de una proposición, y su satisfacibilidad. Se suele hacer prueba por refutación, es decir, por contradiccion o reducción al absurdo:
También podemos usar reglas de inferencia como Modus Ponens. Con todo esto, planteamos un algoritmo de búsqueda teniendo una base de conocimiento, unos operadores o reglas de inferencia, teniendo unas proposiciones dictadas a la base y probando un objetivo:
Finalmente, para ayudarnos en la inferencia, tenemos razonadores externos como:
* GNU Aris
* Gandalf
* Vampire

## Participantes

* Gonzalo Guzmán del Río
* Daniel López Acero