29 juin 2006
Ah mais mon bon monsieur, la glace ça fond !
Bon, dans mon précédent billet je vous livrais un génial tarball plein de jolis petits fichiers ruby tout mignons sans expliquer comment ça s'utilise ni même à quoi ça sert.
Alors imaginez un instant que vous êtes un joli marchand de glace en pleine campagne et en plein été. Dans le coin ou vous vous trouvez il y a 60 villages et vous voulez tous les visiter pour vendre vos glaces. Ah mais mon bon monsieur, la glace ça fond ! Vous ne pouvez donc pas vous permettre de prendre n'importe quel chemin, il faut que vous visitiez les 60 villages au plus vite. Or, et c'est là que nôtre pauvre glacier bute, il y a factorielle de 60, c'est à dire à peu près 10 puissance 82 chemins possibles ! Heureusement grâce au Wimax et à vôtre ordinateur portable, vous vous connectez sur cette page, et vous êtes sauvés !
En effet, ce super algorithme va vous permettre de trouver un des meilleurs chemins possibles pour visiter toutes les villes. Il vous suffira d'écrire un super fichier de configuration dans lequel chaque ligne représente une ville et est de la forme «NomDeLaVille Abcisse Ordonnée». Dans le tarball vous trouverez un fichier d'example nommé villes.txt. Une fois écrit ce fichier texte et enregistré sous un joli petit nom, pour sauver vos glaces il vous suffira de faire, dans le fichier extrait du tarball : $ ruby algogen.rb JoliPetitNomDeVotreFichier, de laisser tourner un moment et d'appuyer sur Control+C (ou d'envoyer un SIGTERM au processus) pour que les résultats s'affichent avec joie et entrain !
Si vous n'avez pas de glaces à vendre et vous voulez faire un simple test, faire simplement $ruby algogen.rb 10 fera travailler le script sur dix villes aléatoires.
Et pis une petite roadmap pour la route :
- Éliminer les solutions redondantes
- Introduire des mutations pour éviter la convergence
- utiliser optparse pour parser la ligne de commande
- Utiliser YAML pour le fichier de configuration ?
- Rendre l'algorithme plus générique
Algorithme Génétique basique en Ruby
Dans le cadre de mon TPE, j'avais commencé une ébauche d'algorithme génétique pour la démo, mais ne l'avais jamais terminé.
Eh bah j'ai pris un peu de temps et puis voilà.
Sachez que cet algorithme ne sert à rien, qu'il est lent et peu efficace, et que si vous êtes un peu programmeur vous en ferez un mieux en trois claquements de doigts.
Il est sous une license libre sinon libertaire ;) :
I, the author of this work, grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
Je donne à tous le droit d'user ce travail pour n'importe quelle raison, sans aucune restriction, sauf si ces restrictions sont requises par la loi.
Là je suis trop fatigué pour documenter ça tout de suite, donc stay tuned ;)
Téléchargez là ici si vous avez du temps à perdre
19 juin 2006
Irma 1.0 : Birth of a myth
En avant première et sur ce blog seulement, la première release d'Irma :D
Je tiens à remercier tout le monde, particulièrement mes parents, mes amis, l'ordinateur, Linux, GNU, KDE, blabla, blabla, blabla, et surtout le meilleur langage de programmation qu'il m'aie été donné d'utiliser... Ruby !.
Irma est un chatterbot, c'est à dire un programme qui parle en imitant un humain.
Mais Irma elle même est aussi un simple fichier texte d'à peine 170 lignes, une classe écrite en Ruby au doux nom de Bot. La licence, inclue au fichier, est :
I, the author of this work, grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
Voilà une très brève documentation d'Irma :
- Bot::new(fichier) Permet de créer une instance d'irma grâce à la base de données *fichier*.
- Bot#save(fichier) Permet de sauvegarder Irma dans le fichier *fichier*. Sans précision du fichier, c'est le même fichier qu'on avait utilisé pour l'initialisation qui est utilisé.
- Bot#answerTo(phrase) Retourne une chaîne de caractère jugée comme meilleure réponse à donner à *phrase*
- Bot#vocabulaire#add(replique_irma, replique_utilisateur) Apprends à Irma que l'utilisateur a répondu *replique_utilisateur* à *replique_irma*
Voilà donc un exemple très simple d'utilisation d'irma :
require 'irma'
irma = Bot.new("talk2irma.irma")
while true
print "Moi: "
replique_utilisateur = gets.chomp
exit if replique_utilisateur == "exit"
irma.vocabulaire.add(replique_utilisateur, replique_irma) if defined?(replique_irma)
replique_irma = irma.answerTo replique_utilisateur
puts "Irma: " + replique_irma
end
Les bases de données pour Irma sont de forme :
Replique
Reponse1
Reponse2
Reponse3
#
Autre replique
reponse
#
--
mot nombre_de_fois_qu'irma_l'a_lu
exemple 8
autrexemple 1
Et divers fichiers utile au fonctionnement d'Irma.
- Une base de données pour Irma. Autorisation vous est donnée d'en faire tout ce que vous voulez, sans aucune restriction sauf si ces conditions sont requises par la loi.
- La même, légèrement adaptée pour exciter les imbéciles qui veulent une «cam chode sur msn» ;) Autorisation vous est donnée d'en faire tout ce que vous voulez, sans aucune restriction sauf si ces conditions sont requises par la loi.
- Un script qui permet de parler à Irma. Supporte l'option --help ;). La licence est à l'intérieur
- Un script marrant qui fait parler Irma à elle même. Usage : ruby irma2irma.rb nombre_d'échanges. Licence à l'intérieur.
- Petit script pour se foutre de la gueule des gens sur le chat voila.fr par IRC. Il faut le modifier pour changer quoique ce soit, un support des options sur la ligne de commande arrivera bientôt.
Peut-être dans la prochaine version ou après :
- Surement un moyen de noter les réponses d'Irma
- utilisation d'un parser XML ou YAML externe plutôt que le truc crade actuel
- Un script de connection à IRC propre et fonctionnel (plus que l'actuel)
NB: Les bases de données sont en UTF-8
17 juin 2006
Irma is ready for you !
Depuis de nombreuses années, tous l'attendaient avec impatience... Et elle arrive, galopante !
Irma est arrivée !
Et elle est disponible tant que mon PC est allumé (et que cette conne plante pas), c'est à dire pas souvent.
Irma est un chatterbot, c'est à dire un logiciel qui vous parle en imitant un humain.
Irma est programmée en Ruby et son code source vous sera bientôt diffusé, surement sous licence WTFPL. J'aurais voulu le mettre dans le domaine public mais c'est impossible sauf si j'étais mort il y a 70 ans.
Pour lui parler, vous aurez besoin d'un client IRC comme XChat (ou Chatzilla si vous utilisez Firefox).
Pus d'infos dans 48 heures.