MIL usa dos ordenamientos (1) sobre símbolos predicados y (2) sobre términos. Los ordenamientos aseguran que un objetivo G se pruebe utilizando átomos inferiores en el ordenamiento.
Para ordenar (1), suponga que tiene la cadena de metarule:
P (A, B) <- Q (A, C), R (C, B).
- ¿Cuál es el mejor lenguaje de programación para el aprendizaje automático? ¿Qué idioma es mejor para programar microcontroladores y otras partes de hardware?
- ¿Cuáles son los mejores métodos para recopilar datos de entrenamiento para el algoritmo Naive Bayes?
- ¿Se pueden usar datos generados por simulación por computadora para algoritmos de aprendizaje automático?
- ¿Cómo debo comenzar a escribir una IA que jugará FIFA?
- ¿Cómo se conecta la regresión lineal a los filtros de Kalman?
Para garantizar la terminación, nos aseguramos de que P> Q y P> R, donde> se refiere al orden sobre los símbolos predicados. Metagol, una implementación MIL, crea automáticamente un ordenamiento total arbitrario sobre los símbolos de predicado en el conocimiento de fondo y coloca el predicado objetivo en la parte superior del orden.
Por ejemplo, suponga que está tratando de aprender la relación de los abuelos utilizando los hechos madre y padre (para simplificar, suponga que cada predicado es diádico). Entonces un pedido es {abuelo, madre, padre}. Para probar una metarule con un abuelo en la cabeza, Metagol solo puede usar a la madre o al padre como átomos del cuerpo. Cuando se inventa un predicado, se coloca debajo del predicado objetivo en el orden. Entonces, si Metagol inventa tres nuevos predicados f3, f3, f2, el orden sería {abuelo, f3, f2, f1, madre, padre}.
El pedido (1) es suficiente para las metarules no recursivas, pero insuficiente para las metarules recursivas.
Ordenar (2) es específico de las metarules recursivas y se define sobre los términos.
Por ejemplo, para el metarule tailrec P (A, B) C> B. Este pedido no sea manejado por Metagol y el usuario debe definir eso.
Por ejemplo, suponga que hay un robot en un espacio unidimensional y cada término es un estado (una lista de hechos de Prolog). El siguiente orden asegura que el robot siempre se mueva al menos un lugar a la derecha. Debido a que el espacio es finito, la terminación está garantizada.
obj_gt (A, B): –
world_check (robot_pos (APos), A),
world_check (robot_pos (BPos), B),
APos <BPos.
Como segundo ejemplo, al aprender las funciones de transformación de cadenas (donde los términos son listas de caracteres) aplicamos un orden sobre los términos de la siguiente manera:
obj_gt (A, B): –
input_len (A, Na),
input_len (B, Nb),
Na> Nb.
input_len (In / _): – longitud (In, N).
Aquí, nos aseguramos de que la longitud de la entrada disminuya con cada llamada recursiva. Como la longitud de la lista no puede ser negativa, la terminación está garantizada.
En ambos casos, el pedido se implementa como una condición posterior a la prueba en la metarule, por lo que definiríamos la metarule tailrec de la siguiente manera:
P (A, B): – Q (A, C) -obj_gt (A, C), P (C, B) -obj_gt (C, B).
Espero que ayude.