Perché il Prolog è buono per la programmazione AI? [chiuso]

23

Sto ricercando i linguaggi di programmazione utilizzati per la programmazione AI. So che LISP è insegnato come un linguaggio di programmazione AI nella mia università, ma Prolog lo è raramente. Sono un po 'affezionato a Prolog, ma non sono un programmatore di IA quindi non penso di essere qualificato per giudicare da solo perché Prolog è migliore di LISP / Scheme. Mi chiedevo se i programmatori avessero qualche input su questo argomento.

Come potresti sostenere che Prolog sarebbe più utile per la programmazione AI?

L'ho cercato un po 'e l'argomento di base che ho visto più e più volte è che, poiché i pensieri sono presentati in logica, e Prolog è un linguaggio di programmazione logico, Prolog può costruire facilmente macchine decisionali, o qualcosa del genere effetto.

C'è qualcos'altro che può essere detto per Prolog in AI?

    
posta 2rs2ts 16.06.2011 - 08:29
fonte

4 risposte

18

Dalla prefazione a Prolog Programming for Artificial Intelligence :

Prolog is a programming language centred around a small set of basic mechanisms, including pattern matching, tree-based data structuring and automatic backtracking. This small set constitutes a surprisingly powerful and flexible programming framework. Prolog is especially well suited for problems that involve objects - in particular, structured objects - and relations between them. For example, it is an easy exercise in Prolog to express spatial relationships between objects, such as the blue sphere is behind the green one. It is also easy to state a more general rule: if object X is closer to the observer than object Y, and Y is closer than Z, then X must be closer than Z. Prolog can now reason about the spatial relationships and their consistency with respect to the general rule. Features like this make Prolog a powerful language for artificial intelligence (AI) and non-numerical programming in general. There are well-known examples of symbolic computation whose implementation in other standard languages took tens of pages of indigestible code. When the same algorithms were implemented in Prolog, the result was a crystal-clear program easily fitting on one page.

Fondamentalmente è un ottimo linguaggio per esprimere varie relazioni e obiettivi in un modo succinto, (soprattutto) leggibile e (semi) naturale. Il codice equivalente in, diciamo, il Lisps tende ad essere più prolisso e più offuscato nel suo intento perché passi un sacco di tempo nelle viscere e nelle tubature della gestione e del ragionamento sulle relazioni.

    
risposta data 16.06.2011 - 08:56
fonte
25

Ho preso un'introduzione al corso di intelligenza artificiale nel mio corso che ha utilizzato Prolog per farci implementare un sistema esperto.

Un sistema esperto è un pezzo di software che viene utilizzato per risolvere un problema molto specifico la cui soluzione dipende da un numero elevato di regole e variabili.

Ad esempio, puoi immaginare un sistema esperto che ti dice se dovresti portare un ombrello con te quando esci o meno; daresti una serie di dati (se è nuvoloso, se ha piovuto il giorno prima, che stagione è, ecc.) e il sistema esperto passerebbe attraverso le regole per darti una risposta (se è nuvoloso e ha piovuto il il giorno prima, dovresti prendere un ombrello).

La natura di Prolog rende molto semplice implementare regole e fatti (in Prolog, tutto è una regola o un fatto), quindi "interrogare il database" (ottenere una risposta alla tua domanda), anche quando ne hai migliaia regole e fatti.

Se ti interessa l'argomento, ti consiglio di installare un interprete Prolog e provare a implementare un sistema esperto di base per farti un'idea: potrebbe aiutarti a capire perché è uno strumento così potente per questi attività.

    
risposta data 16.06.2011 - 08:49
fonte
15

La differenza è un po 'come usare SQL per le query di database piuttosto che scrivere un programma in, per esempio, C. In SQL, dici quello che vuoi - ma non devi (direttamente) specificare l'algoritmo usato per derivare esso.

Un programma Prolog viene talvolta chiamato un database, ma in realtà è un insieme di istruzioni logiche di predicato. Il meccanismo di valutazione prende la query ed esegue sostituzioni su di essa in base alle istruzioni logiche dei predicati, eseguendo una ricerca per trovare le soluzioni corrette. Tutti gli algoritmi di ricerca necessari (molto più coinvolti di una query SQL) sono incorporati nel compilatore Prolog.

Una query SQL, se dovessi implementare la stessa logica in modo ingenuo in C, non avrebbe bisogno di molto più del ciclo e se / o dei condizionali.

Una query Prolog, implementata in C, avrebbe bisogno (almeno) di una ricerca di backtracking usando la tecnica union-find. E questa, ancora, è una soluzione ingenua.

Un certo tipo di programmazione dell'IA coinvolge molto del tipo di ricerca che fa Prolog. Non sorprende che, in realtà, la programmazione AI sia stata eseguita in Lisp o in un'altra lingua, ma Prolog è stato scritto appositamente per fare il lavoro.

La logica predicativa è l'approccio naturale per definire quello stile di problema AI e, in Prolog, una volta che hai quella definizione puoi eseguirla direttamente, senza dover implementare tutti quegli algoritmi di ricerca imbarazzanti.

    
risposta data 16.06.2011 - 08:57
fonte
3

Ho preso 2 moduli Prolog all'Università e mi sono molto divertito a sviluppare nella lingua.

È particolarmente adatto ai sistemi esperti, ho scritto una diagnosi di sintomo medico.

Il modo in cui mi è stato spiegato è che il Lisp tende ad essere usato di più in alcuni paesi e Prolog negli altri.

In termini di ciò che è il migliore, ho coperto brevemente Lisp solo quando ho eseguito il calcolo lambda in un modulo di Teoretical Computer Science, quindi sono prevenuto nei confronti di Prolog.

Se stai sviluppando un'applicazione per gestire regole e fatti per ottenere risposte, Prolog è molto buono e supporta naturalmente il backtracking.

    
risposta data 16.06.2011 - 16:00
fonte