- Project Repo: SMARPGEN
- Intern. Name: ARPGEN
- Source File : please read the readme.txt inside this repo
- CURRENT VER.: 0.4k
- Devel. Lang.: Common Lisp the Language, 2nd Edition
- Description : Algoritmo risolutore di problemi generici (Variant of the Generic Problem Solver Algorithm)
- Spoken Lang.: The code and comments are in Italian language, sometime in English
- License ver.: Apache Version 2.0 LICENSE, see the "license.html" for more details.
GOFAI Algorithm called: SMARPGEN (means-ends analysis)
SMARPGEN is a variant of the classic Generic Problem Solver Algorithm (means-ends analysis). GOFAI ("Good old fashioned artificial intelligence") is classical symbolic AI, as opposed to other approaches, such as neural networks, situated robotics.
ITALIAN: Rilascio il codice sorgente di questo algoritmo in quanto l'obiettivo che volevo raggiungere e' fallito. Trattasi di algoritmo di intelligenza artificiale basato sulla computazione simbolica di vecchia generazione.
ENGLISH: I release the source code of this algorithm because the goal I wanted to achieve has failed. This is an artificial intelligence algorithm based on old generation symbolic computing.
I'M SORRY BUT YOU HAVE TO TRANSLATE THIS DOCUMENTATION YOURSELF, THANKS.
ALGORITMO RISOLUTORE DI PROBLEMI GENERICI ver.x.x
Questa guida vi spiegherà brevemente come "installare" correttamente il programma ARPGEN e come usare i comandi interni per farlo funzionare.
LEGGI QUESTO README PER CAPIRE IL FUNZIONAMENTO
PREMESSA Questo programma fa parte del modulo che fa funzionare l'intelligenza-artificiale di Regen. L'ho creato partendo dagli algoritmi GPS che si trovano nella libreria PAIP. In seguito allo studio di questi algoritmi sono riuscito a mettere a punto un nuovo algoritmo più efficiente, in grado di risolvere diversi tipi di problemi con gli stessi operatori. Una volta che abbiamo definito un problema, basta dire al programma di risolverlo e lui cercherà di trovare una soluzione; se non la trova, verrà fornita una possibile spiegazione sul perché del suo fallimento. Questo programma in pratica sarebbe un risolutore-di-problemi che però funziona in modo molto diverso poiché risolve i problemi usando una logica a 5-stati (vero, falso, forse-vero, forse-falso, contraddizione) e puo' ragionare anche senza aggiornare gli stati-logici correnti e non serve a priori una descrizione completa sugli stati iniziali del "mondo", e molte altre cose... Ci sono anche delle limitazioni purtroppo, che per ora non sono riuscito a togliere. La limitazione più importante di questo programma è che non riesce a risolvere obiettivi a stati-multipli-interdipendenti. Tuttavia vorrei precisare che questo programma non è un pianificatore classico ma un risolutore-di-problemi di bassa complessità, un pianificatore probabilmente è in grado di risolvere problemi piu' complessi all'interno di uno specifico dominio di conoscenza che questo programma non puo' ancora risolvere, a volte tuttavia puo' accadere il contrario, come riscontrato nei miei test di verifica.
Una volta che abbiamo definito un problema (guardare gli esempi dei file qtest*.txt nel repo) possiamo chiedere al programma di risolvere un altro tipo di problema o di sotto-problema con altri tipi di informazioni compatibili con quelle fornite in precedenza, inoltre gli operatori (le azioni che il programma genera per risolvere il problema) sono di tipo generico, e quindi saranno riutilizzati per risolvere differenti problemi senza doverli specificare di nuovo ogni volta come nel vecchio GPS. Il sistema a seconda delle informazioni ricevute utilizzerà gli operatori più appropriati che gli permettono di raggiungere la soluzione (stato-obiettivo).
Gli operatori (azioni) che ho inserito nel sistema per ora sono questi:
(?): opers oper: (DIRE ?X A ?Y) oper: (TELEFONARE A ?X CON ?Y) oper: (CHIAMARE ?X) oper: (CERCARE ?X IN ?Y) oper: (LASCIARE ?X SOPRA ?Y CON ?Z) oper: (SPOSTARE ?X SOPRA ?Y CON ?Z) oper: (PRENDERE ?X SOPRA ?Y CON ?Z) oper: (METTERE ?X SOPRA ?Y CON ?Z) oper: (DARE ?X A ?Y CON ?Z) oper: (PAGARE ?X A ?Y CON ?Z) oper: (METTERE-IN-MOTO ?X) oper: (TRASPORTARE ?X A ?Y CON ?Z) oper: (PORTARE ?X A ?Y CON ?Z) oper: (FARE-INSTALLARE ?X IN ?Y DA ?Z)
Appena posso ne aggiungerò degli altri, tempo permettendo. Questi sono gli operatori che il sistema utilizzerà per risolvere i problemi, ovviamente, non tutti i problemi potranno essere risolti, ma solo quelli che rientrano in questo dominio. Aggiungere nuovi operatori nel sistema è un po' complicato... purtroppo. Nel frattempo, se vi interessano particolari operatori, dovete creare e aggiungere voi stessi i nomi dei nuovi operatori (predicati verbali) che vi interessano.
NOME-OPERATORE è il verbo, cioè l'azione prodotta, es: dare, prendere-oggetto, portare-a ... il nome dell'operatore deve essere preciso e deve descrivere nel miglior modo possibile l'azione da compiere, se è composto da due o più parole si deve formare un unico nome con le parole separate da un trattino.
La cosa migliore, sarebbe quella di creare un algoritmo per fare in modo che il sistema riesca da solo a scoprire e aggiungere nuovi predicati, senza doverli inserire a mano, ma mi sa che è molto complicato...
ESEMPI DI PROBLEMI RISOLTI CON ARPGEN LI TROVATE NEI FILE QTESTP1.TXT E QTESTPP.TXT.
LICENSE AGREEMENT OF CLISP
CLISP is another free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. You must see in CLISP license for all license agreements. Home page at http://clisp.cons.org/.
INSTALLAZIONE DI ARPGEN
Per utilizzare ARPGEN dovete estrarre i file da clisp.zip e gli altri del repositorio in una cartella in modo da avere i seguenti file e tutti gli altri file di supporto nella stessa cartella:
lisp.cmd lisp.exe lispinit.mem qtestpp.txt qtestp1.txt ... ...
AVVIO DI ARPGEN
Il programma si lancia cliccando sul file lisp.cmd che aprirà automaticamente una console CLISP e carichera' lo script ARPGEN visualizzando il menu di gestione del programma, vedere nel file readme.txt.
AVVIO DI ARPGEN PERSONALIZZATO
Modificare se necessario il file lisp.cmd in modo che i percorsi puntino alla directory di ARPGEN. Il programma si lancia cliccando sullo script lisp.cmd che aprirà una console CLISP e vi porterà direttamente dentro all' interprete Lisp. La prima riga che appare dopo il caricamento di CLISP è la seguente:
C:\Users\Pippo\ARPGEN> C:\Users\Pippo\ARPGEN>.\lisp.exe -B .\ -N .\ -M .\lispinit.mem -norc -m 50MB -i -q [1]>
Al prompt [1]> caricare il programma con il comando Lisp come indicato qui sotto seguito da ENTER, comparira' il menu di gestione del programma, ad esempio:
[1]>(load 'arpgen04e)
Per terminare premere CTRL+C e poi scrivere (quit) seguito da ENTER