Site de Vincent Gripon

Blog sur mes recherches et mon enseignement

Bibliothèque SAM pour Matlab

Vous trouverez sur cette page une implémentation Matlab des réseaux de neurones décrits ici.
Cliquez ici pour la télécharger. Note : une version étendue et optimisée, proposée par Stephen Larroque, est disponible : ici.

Module OCaml Big_float

J'ai codé très rapidement (trop rapidement) une implémentation de "bigfloats" qui peuvent servir à ceux qui voudraient utiliser des flottants à précision arbitraire avec OCaml.
Pour l'utiliser, il suffit de télécharger le fichier ici. Le code n'est pas commenté mais très simple à comprendre.

Module Bitarray

Ce petit module pour Ocaml permet d'utiliser des tableaux de bits en Ocaml sans utiliser trop d'espace mémoire. J'ai développé ce module car l'implémentation offerte par Ocaml des tableaux de booleans natifs prend autant de place qu'un tableau d'entiers.
Vous trouverez la documentation automatiquement générée ici et les fichiers ici.

Démo mémoire associative

Applet Java

Ce programme en java vous permet de tester les mémoires associatives. Vous devez avoir Java installé sur votre machine pour pouvoir l'utiliser. Sinon, vous pouvez utiliser le programme javascript ci-dessous à la place. L'implémentation correspond à celle décrite dans ce papier.

Programme javascript

Ce petit programme n'est pas optimisé et écrit en javascript. Ainsi, je vous conseille de ne pas utiliser de valeurs trop importantes. Vous devez avoir un navigateur avec support de javascript pour que ce programme fonctionne.


Nombre de clusters c:
Nombre de fanaux par cluster l:
Nombre de clusters effacés:
Nombre d'itérations:
Nombre de messages appris:
Nombre de tests:

Taux d'erreur de remémoration:
Densité du réseau:

Calculer

TaupIC

Page officielle

TaupIC, pour Taupe Informatique : le Concours, est un concours de programmation à l’intention des élèves de classes préparatoires. Il s’adresse de par son contenu plus spécifiquement aux élèves des classes MP/MP* qui suivent l’option informatique.

Je suis co-créateur de ce concours et je le co-organise depuis sa première édition en 2011.

Bibliothèque SAM pour OCaml

La bibliothèque Sam pour OCaml permet d’utiliser des mémoires associatives telles que décrites dans l’article disponible ici.
Vous pouvez la télécharger directement ici. Elle est accompagnée d’un code exemple qui permet de retrouver les points de la figure 13 de l’article.
Pour plus d’informations, consultez la documentation générée automatiquement par OCamlDoc ici.

OOCaml

OOCaml est une version pre-alpha que j’aimerais développer dans les années à venir. Ce programme utilise un traitement pré-compilation pour transformer la syntaxe de base de OCaml. Sa principale fonction pour le moment est de transformer tous les types de base en objets.

Il permet une syntaxe alléchante :

#print ("hello"^(3.5+1)*2);;
hello8 - : unit = ()
#for i = 0 to 3 do print (exp i); done;;
1.2.718281828467.3890560989320.0855369232- : unit = ()
#let rec sum list =
    if list#empty
    then 0
    else list#hd + (sum list#tl)
  ;;
val sum :
  (< empty : bool; hd : < int : int; .. >; 
       tl : 'a; .. > as 'a) -> Oint.oint = <fun> 
# print (sum [1.;2.]);;
3- : unit = ()

Une version embryonaire est disponible ici.

Jeux sur labyrinthes

Labyrinthe

Les binaires, compilés avec ocaml 3.11.2 sous un ubuntu 32 bits, sont disponible dans l’archive ici. Version 64 bits : ici.

Fichiers

Le jeu est composé de trois fichiers.
Le premier, nommé laby, est appelé de la façon suivante :
./laby columns rows density game
Les trois premiers paramètres définissent le nombre de colonnes, de lignes et la densité de mur souhaitée dans le labyrinthe. Le troisième paramètre n’est qu’une requête et sera affiné par un algorithme de façon à ce que le graphe soit connexe. Demander par exemple une densité de 1 ne donnera jamais (sauf cas dégénéré) une véritable densité de 1.
Le dernier paramètre, appelé game définit le jeu à utiliser, voir ci-dessous.
Le programme lit des instructions sur le stdin, ces instructions doivent impérativement être de la forme XdX vaut soit 1 pour le premier joueur, soit 2 pour le second. La seconde lettre, d, code le déplacement voulu pour le joueur. Les seuls déplacements autorisés sont h,b,g et d respectivement pour haut, bas, gauche et droite. Si le déplacement n’est pas valide, par exemple si un mur est présent, le joueur restera immobile.

Le second fichier, nommé interface est appelé de la façon suivante :
./interface columns rows density game prog1 [prog2]
Ce programme, comme son nom l’indique, fait l’interface entre le labyrinthe et le programme de contrôle des joueurs. Selon le jeu choisi (voir ci-dessous), il prend en plus de laby un ou deux programmes en argument.
Il n’est pas nécessaire d’utiliser le programme laby si interface est appelé.

Le troisième fichier est un exemple de programme de contrôle pour le premier type de jeu. Il ne s’appelle pas directement mais doit être donné comme dernier argument à interface sur le modèle :
./interface columns rows density 1 ./gauche
La stratégie de ce contrôle est de toujours longer le mur de gauche.

Pour faire soit même un programme de jeu, il suffit de considérer les choses suivantes :
Lorsque le programme est appelé (par interface), il reçoit comme arguments le nombre de colonnes, le nombre de lignes et le type de jeu.
Il reçoit ensuite des informations sur son stdin et communique ses décisions (h,b,g ou d) sur le stdout. Ces décisions doivent impérativement être suivies d’un retour à la ligne ainsi que d’un flush.
Selon le type de jeu, les informations reçues différent.

Types de jeu

Il y a trois types de jeu.
Le jeu n°1 fonctionne de la façon suivante: le labyrinthe n’est pas donné au programme de contrôle. Il ne lui est communiqué que sa position ainsi que celle de la cible. Ces information sont données sous la forme suivante : [|pos;poscible|]pos désigne la position du joueur et poscible celle de la cible. Ces positions sont codées comme étant le produit de la ligne fois le nombre de colonnes plus la colonne.
Le but du jeu est de réussir à atteindre le point d’arrivée.

Le jeu n°2 communique au programme de contrôle le labyrinthe. Il est envoyé au départ sur le stdin sous la forme suivante : [|[a1;a2];[b1];[];…….. |] où les points indiquent qu’il peut y avoir plus d’éléments. Chaque élément est encadré par des crochets. La liste des valeurs entre les premiers crochets indique les cases reliées à la case 0, celle des seconds crochets pour la case 1 etc
Par la suite le fonctionnement est comme pour le jeu 1.

Le jeu n°3 communique le labyrinthe suivi de la liste des objets à récupérer. Ce jeu se joue à deux joueurs et le gagnant est celui qui en ramassera le plus (il suffit de passer dessus pour en ramasser un). Il y a une petite subtilité pour ce jeu. La liste des objets est symétrique, de même que le labyrinthe et il y aura toujours un nombre impair d’objets pour qu’il y ait un gagnant. Le dernier objet sera donc toujours au centre du labyrinthe, qui aura donc toujours un nombre impair de lignes et de colonnes.
La liste des objets à récupérer sera communiquée sur le stdin sur une nouvelle ligne sous le format [a;b;c;d.....], chaque lettre représentant la position d’un objet.
A chaque itération la position des deux joueurs est envoyée comme précédemment directement suivie de la liste des objets restants.





Vous êtes le 505911ème visiteur

Site de Vincent Gripon