Controllo Procedurale
Il controllo procedurale si riferisce alla guida mirata del processo di ragionamento in un sistema di IA per renderlo più efficiente e gestibile, evitando percorsi inferenziali inutili. Data la complessità computazionale delle procedure automatiche di dimostrazione dei teoremi (come la Risoluzione in FOL), il controllo procedurale è essenziale per ottimizzare le performance, specialmente in domini complessi.
Necessità e Obiettivi:
- Le procedure di ragionamento generale sono computazionalmente costose.
- Conoscere la struttura del dominio può guidare il ragionamento in modo più mirato.
- Obiettivo è migliorare l’efficienza e la gestibilità del processo inferenziale.
Strategie e Applicazioni:
-
Forme Logiche Orientate:
- Una strategia consiste nell’usare implicazioni unidirezionali, che limitano l’inferenza in una sola direzione.
- Un esempio pratico è la suddivisione della base di conoscenza (KB) in “fatti” (verità di base, atomi istanziati) e “regole” (nuove relazioni, implicazioni universali). Questo permette di distinguere tra conoscenza di base e conoscenza derivabile.
-
Definizione delle Regole e Ordine degli Obiettivi:
- La formulazione delle regole in una KB ha un impatto significativo sull’efficienza del ragionamento. Si consideri la definizione della relazione
Ancestor(x, y)(x è antenato di y) basata suParent(x, y)(x è genitore di y):- Definizione 1 (Ricerca Discendente/Dall’alto verso il basso):
Parent(x, y) ⊃ Ancestor(x, y)eParent(x, z) $\land$ Ancestor(z, y) ⊃ Ancestor(x, y). Per dimostrareAncestor(a, e), si cerca un figliobdia(Parent(a,b)) e poi si verifica sebè antenato die(Ancestor(b,e)). Questa soluzione è efficiente se ogni individuo nella catena ha pochi figli, e la sua complessità dipende dalla profondità dell’albero. - Definizione 2 (Ricerca Ascendente/Dal basso verso l’alto):
Parent(x, y) ⊃ Ancestor(x, y)eAncestor(x, z) $\land$ Parent(z, y) ⊃ Ancestor(x, y). Per dimostrareAncestor(a, e), si risale l’albero partendo dae: si cerca un genitoreddie(Parent(d,e)) e poi si controlla seaè antenato did(Ancestor(a,d)). Questa soluzione è più efficiente della prima se ogni individuo ha molti figli (rispetto a pochi genitori). - Definizione 3 (Ricerca Bidirezionale/Mista):
Parent(x, y) ⊃ Ancestor(x, y)eAncestor(x, z) $\land$ Ancestor(z, y) ⊃ Ancestor(x, y). Questa opzione suggerisce una ricerca in entrambe le direzioni contemporaneamente.
- Definizione 1 (Ricerca Discendente/Dall’alto verso il basso):
- L’ordine degli obiettivi nella concatenazione all’indietro (backward chaining) è logicamente irrilevante, ma può influenzare drasticamente l’efficienza computazionale. Ad esempio, per dimostrare
AmericanCusin(x)dalla regolaAmerica(x) $\land$ Cusin(x) ⊃ AmericanCusin(x), se si valuta primaAmerica(x)si potrebbe dover iterare su milioni di americani per trovare il cugino, mentre valutando primaCusin(x)si itererebbe su un numero molto minore di cugini, rendendo la ricerca più efficiente.
- La formulazione delle regole in una KB ha un impatto significativo sull’efficienza del ragionamento. Si consideri la definizione della relazione
Ruolo nel Backward Chaining: Il controllo procedurale è cruciale per mitigare gli svantaggi del backward chaining, come il rischio di cicli infiniti (specialmente con tautologie) e l’inefficienza dovuta alla ripetizione di ricerche per gli stessi obiettivi. Le considerazioni sul controllo procedurale sono quindi necessarie per evitare “tranelli” e rendere il backward chaining utilizzabile in pratica.