Vous avez dit « fuzzy » ?

10 mars 2015

Un article intéressant sur le fuzzy text search (une traduction quelqu’un ?) avec MySQL.

Publicités

Ruzzle et algorithmes génétiques (1/7)

18 décembre 2014

ruzzle_board

J’ai toujours été fasciné par les jeux et les divertissements de lettres, que ce soit le Scrabble, le Boggle, les mots croisés et, plus récemment, le Ruzzle.

Si on exclut les cases lettre et mot compte double et triple, les règles du Ruzzle sont simples (extrait de Wikipedia) :

Il faut former le plus de mots possibles avec les seize lettres disponibles dans une grille de quatre par quatre. Les mots doivent être au moins de deux lettres, et trouvés en utilisant des lettres adjacentes les unes aux autres sans réutiliser deux fois la même case de la grille. Les formes conjuguées des verbes sont acceptées.

Je ne connaissais pas le Ruzzle avant de tomber sur cet article particulièrement intéressant, Ruzzle : à la recherche de la plus belle grille.  L’auteur, Didier Müller, y décrit les diverses méthodes (et ses résultats) ainsi que les programmes écrits en Python qu’il a employés afin de rechercher la grille comportant le maximum de mots.  Ça a piqué ma curiosité, en particulier les tentatives d’optimiser les grilles produites à l’aide d’un algorithme génétique.

J’ai donc décidé de tenter la même expérience : trouver la grille avec le plus de mots possible en utilisant un algorithme génétique.  J’opterai surtout pour la flexibilité au détriment de la performance pour essayer d’étudier une panoplie d’hypothèses et de tester certaines de mes idées.  Évidemment, j’ai comme objectif de battre le record de monsieur Müller !  Je vise, au moins, 1635 mots!

Pour me suivre dans cette longue aventure, vous aurez donc besoin de connaissances en programmation (j’utiliserai Pharo, un environnement de développement Smalltalk), de quelques connaissances en SQL (j’utiliserai probablement MySQL pour sauvegarder les résultats) et de peut-être quelques connaissances en R (pour les graphiques et l’analyse statistique).  Évidemment, je rendrai publics les scipts SQL et R, les chiffriers, le code Smalltalk ainsi que tous les fichiers utilisés à la fin de cette série de chroniques.

Le présent texte sert donc de présentation aux expériences d’optimisation que je décrirai dans les 6 prochains articles.

Voici donc, en vrac, quelques-unes des idées que je testerai :

Article 2 : Stratégies de création d’individus

a) Aléatoire : toutes les lettres ont la même probabilité d’être choisies lors de la création de la grille
b) Muller : utiliser la fréquence des lettres établie par Müller
c) St-Jean : utiliser la fréquence des lettres établie par moi-même (vous verrai en quoi je diffère de Müller)
d) Wikipédia : utiliser la fréquence des lettres décrite sur Wikipédia
e) Anglais : utiliser la fréquence des lettres en anglais
f) Digramme : utiliser la fréquence des digrammes du dictionnaire pour créer la grille
g) Trigramme : utiliser la fréquence des trigrammes du dictionnaire pour créer la grille
h) Quadrigramme : utiliser la fréquence des quadrigrammes du dictionnaire pour créer la grille
i) Voyelles et consonnes : utiliser la fréquence relative entre les consonnes et les voyelles en français
j) Mots de 16 lettres : utiliser des mots de 16 lettres pour créer les grilles
k) St-Jean inversé : utiliser l’inverse de la fréquence de c (les lettres les plus moches deviennent les plus probables)

Article 3 : Stratégies de croisement (crossover)

a) croisement multi-points 50-50
b) croisement multi-points à longueur variable
c) croisement multi-points à longueur fixe
d) croisement simple 50-50 à locus fixe
e) croisement simple 50-50 à locus variable
f) croisement simple à longueur variable
g) croisement simple à longueur fixe

Article 4 : Stratégies de mutation

a) Mutation aléatoire
b) Mutation de la lettre avec la plus petite fréquence de la grille
c) Mutation de la lettre avec la plus petite fréquence au centre de la grille
d) Mutation de la lettre avec la plus petite fréquence sur les bords de la grille
e) Mutation de la lettre la plus grande fréquence de la grille
f) Mutation de la lettre avec le plus d’occurences de la grille

Article 5 : Stratégies de sélection, de survie, d’immigration et d’épidémie

a) Sélection aléatoire pure
b) Sélection aléatoire basée sur la force (fitness) des individus
c) Sélection élitiste (seuls les n% meilleurs individus se reproduisent entre eux)
d) Sélection adaptative (les individus plus forts se reproduisent avec les plus faibles)
e) Survie des meilleurs individus (pour n générations au maximum)
f) Intégration de nouveaux individus « immigrants » dans la population
g) Épidémie : chaque individu avec un gène spécifique aléatoire est éliminé de la population

Article 6 : Paramètres de la population et de la simulation

a) Pourcentage de mutation fixe
b) Pourcentage de mutation variable
c) Taille de la population fixe
d) Taille de la population variable
d) Pourcentage de croisement fixe
f) Pourcentage de croisement variable
g) Pourcentage de survie fixe
h) Pourcentage de survie variable
i) Pourcentage d’immigration fixe
j) Pourcentage d’immigration variable

Article 7 : Conclusions, résultats et autres recherches

Si jamais il y avait un intérêt pour cette série d’article, je me propose de publier un document PDF détaillé que je pourrai (là encore, seulement s’il y a un intérêt!) aussi traduire en anglais.


Voyager dans le temps

20 juillet 2013

Vous recherchez désespérément une page web bien précise mais, hélas, celle-ci n’existe plus ou le serveur qui l’héberge est hors service?  Qu’à cela ne tienne! Il existe des moyens pour visualiser/récupérer ces pages.

1) La copie cachée

Le premier est tout simple.  Avec un peu de chance, si vous faites une recherche sur Google et que l’engin de recherche vous affiche un résultat pour la page désirée, il en existe une copie en cache (un genre de copie de sauvegarde de Google qu’on appelle snapshot, un snapshot étant l’équivalent d’une photo).

Pour voir la copie que Google garde en cache, vous n’avez qu’à clicker sur le petit triangle à l’extrême droite de l’URL de la page puis à sélectionner « Cached » dans le menu qui apparaîtra (voir image ci-dessous)

Google_Cached_Page

Google vous affichera alors la copie cachée qu’il a.

Fait à noter, les engins de recherche Bing et Yahoo (et bien d’autres) offrent aussi la possibilité de visualiser la copie en cache de la page.  Alors soyez conscients qu’il se peut parfois qu’une page non trouvée sur Google ait été heureusement archivée par un autre engin de recherche!

2) Le WayBackMachine

Dans le cas où la page recherchée n’existe plus ou si vous désirez consulter des versions antérieures de cette page, il y a toujours possibilité d’utiliser le WayBackMachine.  Cet outil fait, à intervalles plus ou moins réguliers, des snapshots des pages qui sont changées.

Comment faire?  Allez sur WayBackMachine et entrez l’URL de la page que vous désirez consulter, comme ci-dessous:

WayBackMachine

Vous apparaîtra alors une page de résultats avec toutes les dates pour lesquelles un snapshot de la page a été pris (voir ci-dessous):

WayBackMachineCalendar

Cette page de résultats contient un graphe indiquant sommairement les snapshots qui ont été pris ainsi qu’un calendrier vous indiquant les mois et les dates desdits snapshots (dans l’image ci-haut, le calendrier indique qu’il existe 1 snapshot fait le 30 mars 2013 ainsi que les 2, 14 et 15 avril 2013).

Ne vous reste plus qu’à choisir la date qui vous convient!

3) Autres outils

Il existe bon nombre d’autres outils qui vous permettent de surveiller un site web (en tout ou en partie, ne serait-ce que des pages, des images ou des fichiers précis) et de télécharger le site web en entier (ou seulement les pages changées ou nouvelles depuis le dernier snapshot).  Quelques-uns de ceux-ci, que j’utilise depuis presque 10 ans, feront l’objet d’un prochain article!

4) Ne pas oublier

Rien ne s’efface vraiment jamais pour de bon sur internet!