Il concatenamento all’indietro

Il concatenamento all’indietro inizia con un elenco di obiettivi (o un’ipotesi) e funziona all’indietro dal conseguente all’antecedente per vedere se alcuni dati supportano uno di questi consequenti. Un motore di inferenza che utilizza il concatenamento all’indietro cerca le regole di inferenza finché non ne trova una con una conseguente (quindi clausola) che corrisponde a un obiettivo desiderato. Se l’antecedente (clausola If) di tale regola è noto per essere vero, viene aggiunto all’elenco degli obiettivi (affinché il proprio obiettivo sia confermato, è necessario fornire anche dati che confermino questa nuova regola).

Per esempio, supponiamo che un nuovo animale domestico, Fritz, viene consegnato in una casella opaca con due fatti sul Fritz:

  • Fritz gracchia
  • Fritz mangia mosche

L’obiettivo è quello di decidere se il Fritz è verde, basata su una regola di base, contenente i seguenti quattro regole:

Un Esempio di Backward Chaining.
Un esempio di Backward Chaining.

  1. Se X gracchia e X mangia mosche – Allora X è una rana
  2. Se X trilli e X canta – Allora X è un canarino
  3. Se X è una rana – Allora X è verde
  4. Se X è un canarino – Allora X è giallo

indietro Con il ragionamento, un motore di inferenza possibile determinare se il Fritz è verde in quattro fasi. Per iniziare, la query è formulata come un’asserzione obiettivo che deve essere dimostrata:”Fritz è verde”.

1. Fritz è sostituito da X nella regola # 3 per vedere se la sua conseguente corrisponde all’obiettivo, quindi la regola #3 diventa:

 If Fritz is a frog – Then Fritz is green

Poiché il conseguente corrisponde all’obiettivo (“Fritz è verde”), il motore delle regole ora deve vedere se l’antecedente (“Fritz è una rana”) può essere dimostrato. L’antecedente, quindi, diventa il nuovo obiettivo:

 Fritz is a frog

2. Di nuovo sostituendo Fritz per X, la regola #1 diventa:

 If Fritz croaks and Fritz eats flies – Then Fritz is a frog

Poiché il conseguente corrisponde all’obiettivo corrente (“Fritz è una rana”), il motore di inferenza ora deve vedere se l’antecedente (“Fritz gracchia e mangia mosche”) può essere dimostrato. L’antecedente, quindi, diventa il nuovo obiettivo:

 Fritz croaks and Fritz eats flies

3. Poiché questo obiettivo è una congiunzione di due affermazioni, il motore di inferenza lo suddivide in due sotto-obiettivi, entrambi i quali devono essere dimostrati:

 Fritz croaks Fritz eats flies

4. Per dimostrare entrambi questi sotto-obiettivi, il motore di inferenza vede che entrambi questi sotto-obiettivi sono stati dati come fatti iniziali. Pertanto, la congiunzione è vera:

 Fritz croaks and Fritz eats flies

pertanto l’antecedente della regola #1 è vero e il conseguente deve essere vero:

 Fritz is a frog

pertanto l’antecedente della regola #3 è vero e il conseguente deve essere vero:

 Fritz is green

Questa derivazione, quindi, consente al motore di inferenza di dimostrare che Fritz è verde. Le regole n. 2 e n.4 non sono state utilizzate.

Nota che gli obiettivi corrisponde sempre affermato versioni dei successivi risvolti (e non negata versioni come nel modus tollens) e anche allora, i loro antenati sono quindi considerati come i nuovi obiettivi (e non le conclusioni come nell’affermare la conseguente), che, in definitiva, deve corrispondere fatti noti (di solito definito come successivi, i cui antecedenti sono sempre true); pertanto, la regola di inferenza utilizzato è il modus ponente.

Poiché l’elenco degli obiettivi determina quali regole vengono selezionate e utilizzate, questo metodo viene chiamato goal-driven, in contrasto con l’inferenza forward-chaining basata sui dati. L’approccio backward chaining è spesso impiegato da sistemi esperti.

Linguaggi di programmazione come Prolog, Knowledge Machine ed ECLiPSe supportano il backward chaining all’interno dei loro motori di inferenza.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.