Intelligence Artificielle

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Pour le langage Lisp (dont je parlai un peu plus haut), ca ressemble à ça :

Code : Tout sélectionner

;;; *****************************************************
;;;		Les variables globales
;;; *****************************************************

(defvar *laby*)
(defvar *chemin*)


;;; *****************************************************
;;;		Les quelques fonctions
;;; *****************************************************

;;; initialisation du labyrinthe et MAZ du chemin parcouru
(defun initLaby ()
	(setq *laby* '(
		(E 1 8)(1 2 9 E)(2 3 1)(3 4 2)
		(4 5 3)(5 6 4)(6 7 5)(7 15 6)
		(8 E 9)(9 1 10 8)(10 11 18 9)(11 12 10)
		(12 13 11)(13 14 12)(14 15 13)(15 7 14)
		(16 17 24)(17 25 16)(18 10 26)(19 20 27)
		(20 28 19)(21 22 29)(22 23 30 21)(23 31 22)
		(24 16 32)(25 17 33)(26 18 34)(27 19 35)
		(28 20 36)(29 21 37)(30 22 38)(31 23 39)
		(32 24 40)(33 25 34)(34 26 35 33)(35 27 34)
		(36 28 44)(37 29 45)(38 30 46)(39 31 47)
		(40 32 48)(41 42 49)(42 43 50 41)(43 44 51 42)
		(44 36 52 43)(45 37 53)(46 38 54)(47 39 55)
		(48 40 56)(49 41 50)(50 42 51 49)(51 43 52 50)
		(52 44 51)(53 45 61)(54 46 62)(55 47 63)
		(56 48 64)(57 58 65)(58 59 66 57)(59 60 67 58)
		(60 68 59)(61 53 69)(62 54 70)(63 55 71)
		(64 56 72)(65 57 66 73)(66 58 67 74 65)(67 59 68 75 66)
		(68 60 76 67)(69 61 77)(70 62 78)(71 63 S)
		(72 64 73)(73 65 74 72)(74 66 75 73)(75 67 76 74)
		(76 68 77 75)(77 69 76)(78 70)(S 71)
		(76 68 77 75)(77 69 76)(78 70)(S 71)
	))
	(setq *chemin* nil)
)


;;; renvoi la liste des mouvements possibles à partir du point actuel
;;;	on renvoi 'S, si on est juste à côté de la sortie
(defun mvt_possible (etat_courant)
	(if (member 'S (cdr (assoc etat_courant *laby*)))
		(list 'S)
		(cdr (assoc etat_courant *laby*))
	)
)


;;; Cherche les états atteignables possibles
;;; s'appelle récursivement jusqu'à trouver la sorti (si possible...)
(defun explore (etat_courant etat_precedent)
	;;;(print etat_courant)
	(setq *laby* (remove (assoc etat_precedent *laby*) *laby*))
	(if (equal etat_courant 'S)
		(push etat_courant *chemin*)
		(dolist (x (mvt_possible etat_courant))
			(if (explore x etat_courant)
				(progn
					(push etat_courant *chemin*)
					(return t)
				)
			)
		)
	)
)


;;; Cherche un chemin possible pour sortir du labyrinthe
(defun lance_laby ()
	;;; réinitialise les variables
	(initLaby)
	;;; lance l'exploration + affichages correspondants au résulat
	(if (explore 'E nil)
		(progn
			(print *chemin*)
			"Sortie Trouvee"
		)
		"Sortie non Trouvee"
	)
)

;;; Lance le programme
(lance_laby)
Vous pouvez remarquer que la syntaxe est très particulière...
La base de Lisp est les "Listes" !!! et donc tout ce qui est récursif.
Les listes ce construissent très facilement, mais le reste ... :?

ce code est le résultat de mon TP3 (fais en 20min, montre en main :D) qui consiste en "la recherche de la sortie d'un labyrinthe)

Voici quelques liens
Créateur de niveaux pour le labyrinthe
télécharger Lisp (version gratuite)

Voilà, si vous avez des questions ...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Purée! 8O

C'est incompréhensible ton langage! (Je parle du LISP, hein! :lol: )

Et il y a beaucoup de gens qui s'en servent, de ce truc?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Bah apparement c'est pas mal utilisé dans l'IA.
En fait, "( .... )" est une liste

Le premier élément est une fonction (sauf pour les listes de données).
Exemple : (remove elt my_list) ;;; enlève l'élément "elt" de "my_list"

généralement une liste est évaluée, fauf si on met un " ' " devant : " '( ...) "
Son évaluation renvoi une valeur (qui peut être stoquée ou non - avec un set, setf, setq par exemple)
Exemples :
(set 'a 5) ;;; a prend la valeur 5
(set 'a '(+ 7 2)) ;;; a prend la valeu 9
On est obligé de mettre un " ' " devant le "a" à la première ligne car il est pour l'instant inconnu. La première ligne peut être remplacée par :
(setq a 5) ;;; : setq = setquote

etc....

Voila les principes de bases.
Si vous êtes intéressés, je peut vous filer les PDF de mes cours...
Sinon vous pouvez trouver des trucs sur le net.
:wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Si tu veux je connais pas mal de gens qui ont une intelligence plus qu'artificielle :lol: :lol: :lol:
Vive le thread-safe !
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Boujour a tous,

Dobor a écrit :
le voici tout corrigé !!
en purebasic les structures c'est le signe "\" pas le point !
j'ai corrigé d'autre erreur due a la difference des deux languages Very Happy
Et j'ai essayé le code, je n'ai pas compris comment l'utilisé ny les valeurs a lui fournir :oops:

Un exemple d'utilisation serais le bien venu !
Quelqu'un a t-il celà, parce "moi pas avoir beaucoup intelligence" :lol:

merci d'avance.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je n'ai fait que traduire le code pour l'explication faut aller sur le forum du Dark basic que j'ai donné plus haut !


dans ta signature il manque quelques chose
"La théorie c'est quand rien ne marche et qu'on comprend tout, la pratique c'est quand tout fonctionne et que l'on ne sait pas pourquoi."
Albert EINSTEIN
il manque "ici nous avons reuni les deux la theorie et la pratique, rien ne marche, et personne ne sais pourquoi !" :lol:
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Bien vu, mon cher Dobro :!:

En plus sans le "ici..." c'est plus court.
Répondre