2011-05-23 58 views
5

¿Cuál será el mejor enfoque para implementar el encadenamiento directo y el encadenamiento hacia atrás para el proceso de razonamiento en Java?Encadenamiento hacia adelante y encadenamiento hacia atrás en Java

Nos han dado la base de conocimiento Horn-form que tiene un conjunto de declaraciones.

He intentado buscar en Internet, pero no he podido encontrar ninguna descripción sobre cómo implementar este tipo de concepto de Inteligencia Artificial en la codificación.

Mi opinión:

he pensado hasta ahora que voy a leer cada frase (Horn-Form) y crear un objeto de la misma. Cada objeto de la clase Sentence tendrá variables de relación y cuando pregunte las bases de conocimiento de la cadena hacia atrás o hacia adelante, comprobará una matriz de esos objetos y construirá la cadena que desee.

public class Sentence{ 

    private String impliedBy; 
    private String implementedVar; 

    public Sentence(String sentence){ 
     String[] relation = sentence.split("=>"); 
     this.impliedBy = relation[0]; 
     this.implementedVar = relation[1]; 
    } 
    ... 
} 

Llamando por encima de la clase diciendo ...

Sentence s = new Sentence("a&b=>c"); 

Am I en la pista derecha de lo siento novato para este tipo de programación complicada y según mi predicción que podría necesitar un montón de optimización a ejecutar este tipo de razonamiento a un nivel muy alto. Pero parece que necesito una buena comprensión por parte de alguien, gracias si alguno de ustedes puede ayudar ...

¡Gracias!

Respuesta

6

Usaría un motor de reglas como Drools o JESS antes de tratar de escribir esto para mí.

A menos que su propósito sea aprender a escribir un motor de reglas Rete, en cuyo caso retiraré mi respuesta. Iría y buscaría los documentos Charles Forgy's.

+0

Supongo que es una tarea. Y comprobar si una simple cláusula Horn se cumple o no, en realidad no es especialmente difícil. Incluso un HORNSAT realmente no debería ser demasiado difícil para hacerlo bien, pero entonces tendríamos que saber qué debería implementarse exactamente. – Voo

+0

Muchas gracias, he ampliado mi comprensión con respecto a estas técnicas ... Sin embargo, tendré que investigar más para implementar realmente en un nivel superior, así que como Voo dijo que mi tarea debe ser más fácil de resolver, pero pensé que si estoy aprendiendo algo, ¿por qué? no para aprender de una manera correcta y eficiente, :) Gracias – doNotCheckMyBlog

+0

@Voo, sí compañero, ¡tienes razón! Será bastante fácil de implementar si mis pensamientos anteriores (en cuestión) están bien encaminados. :) Gracias por la ayuda. – doNotCheckMyBlog

0

Bueno lo que también podría ayudar es mediante el uso de:

mapa HashMap = new HashMap(); map.put (impliedBy, impliedVar);

Para obtener la var simplemente: Valor de cadena = map.get (impliedBy).

1

mirada here para obtener una descripción de cómo obtener encadenamiento hacia adelante trabajando en tiempo lineal en el número de variables (tenga en cuenta que la implementación en el fragmento de un bucle a través las cláusulas para cada variable en la agenda). Viene sin código, pero Hornsat realmente no es tan difícil de codificar.

1

Los sistemas como OPS5 generalmente tienen un componente de inferencia que usa encadenamiento directo. Prolog por otro lado usualmente utiliza un encadenamiento hacia atrás.

Ambos reenvíos & encadenamiento hacia atrás se pueden ver como diferentes estrategias para hacer frente a la resolución. Mientras que el encadenamiento directo corresponde a la resolución de la unidad, el encadenamiento hacia atrás será correspondiente a la resolución de entrada.

También es posible construir sistemas que pueden incluir encadenamiento hacia atrás dentro de encadenamiento hacia adelante de una manera controlada . Uno de estos sistemas es Jekejeke Minlog.

Una posible implementación à la Marvin Minsky sería para ver HornClauses como una red. HornClauses que tienen una cabeza X y HornClauses que tienen una X en el cuerpo se conectarían.

A <- D, X  X <- G 
      |  | 
      +------+ 

Ahora el cuerpo de una Cláusula de Horn actúa como una especie de la puerta Y, y desde diferentes HornClauses pueden tener la misma cabeza también hay una puerta O en cuestión. Ahora intenta programar algo que propague la verdad a lo largo de estas puertas.

Adiós

Cuestiones relacionadas